如何仅检查字符串的前 5 个字符的 isalpha()?

问题描述

我想验证一张 PAN 卡,它的前 5 个字符是字母,接下来的 4 个字符是数字,最后一个字符又是字母。我不能使用 isalnum() 因为我也想检查这个特定的顺序,而不仅仅是验证它是否包含数字和字母。

这是我的代码片段:

def validate_PAN(pan):
    for i in pan:
        pan.isalpha(pan[0:4])==True:
            return 1
        pan.isdigit(pan[5:9])==True:
            return 1
        pan.isalpha(pan[9])==True:
            return 1
        else:
            return 0

这显然会返回一个错误,因为它是错误的。我该如何解决这个问题?

解决方法

只需进行字符串切片并检查

s[:5].isalpha()

pan[0:4] - 在这里检查前 4 个字符而不是 5 个字符。

s[m:n] - 这将从第 m 个字符到第 n 个字符(不包括 n)的字符串切片

代码中的错误

pan.isalpha(pan[0:4])==True

这给您带来了错误,因为 isalpha() 不接受任何参数,并且您没有在它之前使用 if

您必须使用 - if pan[:5].isalpha() == True:

,

为了简单起见,您可以使用 regular expression

import re

PAN_1 = 'ABCDE1111E'
PAN_2 = 'ABC1111DEF'

def is_valid_PAN(PAN_number):
    return bool(re.match(r'[a-z]{5}\d{4}[a-z]',PAN_number,re.IGNORECASE))

print(is_valid_PAN(PAN_1)) #True
print(is_valid_PAN(PAN_2)) #False
,

正则表达式非常适合这种情况。

import re

# Pattern for matching a PAN number
pattern = r'\b[A-Z]{5}[0-9]{4}[A-Z]\b'

# compile the pattern for better performance with repetitive matches
pobject = re.compile(pattern)

pan_number = "AXXMP1234Z"
result = pobject.match(pan_number)

if result:
    print ("Matched for PAN: ",res.group(0))
else:
    print("Failed")

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...