【问题标题】:Python Regex on PAN cardPAN 卡上的 Python 正则表达式
【发布时间】:2019-12-02 15:16:59
【问题描述】:

我正在从 PAN 卡中检索 PAN 号码。当我刮盘号时,有时它在几个数字之间有一些空格,例如DWKP K3344E,其中实际的PAN号表达式为ABCDE1234F。我想在正则表达式中的 scraped 数字上考虑空格。

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}?$' 部分。

提前致谢。

【问题讨论】:

  • 去掉空格,if re.search(r'^[a-zA-Z0-9]{5}[0-9]{4}[a-zA-Z]$', re.sub(r'\s+', '', text))
  • 谢谢。它有效
  • 这是 PAN 的 recommended structure,根据维基百科参见正则表达式 here ,为了匹配您的用例,使用非捕获组捕获空白,参见正则表达式 here

标签: python regex python-3.x


【解决方案1】:

我建议在使用正则表达式检查字符串之前从字符串中删除空格(例如,使用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

【讨论】:

    猜你喜欢
    • 2020-03-18
    • 1970-01-01
    • 2016-06-11
    • 2010-09-12
    • 2011-08-06
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    相关资源
    最近更新 更多