我正在从PAN卡中检索PAN号码。当我抓取Pan号时,有时它在少数数字之间有一些空格,例如DWKP K3344E
,其中实际的PAN号表达式将是ABCDE1234F
。我想考虑一下正则表达式中报废的数字上是否也有空格。
import re
if re.search(r'^([a-z?A-Z?0-9]){5}([a-z?A-Z?0-9]){4}([a-z?A-Z?0-9]){1}?$', 'DWKP K3344E'):
print("True")
else:
print("False")
对于上述内容,正则表达式代码也应返回true。为此,只需修改代码中的r'^([a-z?A-Z?0-9]){5}([a-z?A-Z?0-9]){4}([a-z?A-Z?0-9]){1}?$'
部分。
谢谢。
答案 0 :(得分:2)
我建议在使用正则表达式检查字符串之前,从字符串中删除空格(例如,使用re.sub(r'\s+', '', text)
以确保所有Unicode空格都消失了)。
此外,您的正则表达式在字符类中包含问号,因此在输入中允许使用这些字符。您必须删除它们。
尝试
if re.search(r'^[a-zA-Z]{5}[0-9]{4}[a-zA-Z]$', re.sub(r'\s+', '', text)):
# do something
在这里,re.sub(r'\s+', '', text)
首先从文本中删除所有可能的空格,然后^[a-zA-Z0-9]{5}[0-9]{4}[a-zA-Z]$
确保结果匹配:
^
-字符串的开头[a-zA-Z]{5}
-五个字母[0-9]{4}
-四位数[a-zA-Z]
-一封信$
-字符串的结尾。请参见regex demo。