避免从字符串中提取 IBAN 号码

Posted

技术标签:

【中文标题】避免从字符串中提取 IBAN 号码【英文标题】:Avoid extracting IBAN number from string 【发布时间】:2020-12-29 00:32:17 【问题描述】:

我试图避免从我的字符串中提取 IBAN 号码。

例子:

def get_umsatzsteuer_identifikationsnummer(string):
  # Demo --> https://regex101.com/r/VHaS7Y/1
  
  reg = r'DE[0-9 ]12|DE[0-9]9|DE [0-9]9'
  match = re.compile(reg)
  matched_words = match.findall(string)

  return matched_words


string = "I want to get this DE813992525 and this DE813992526 number and this
 number DE 813 992 526 and this number  DE 813992526. I do not want the bank
 account number: IBAN DE06300501100011054517."

get_umsatzsteuer_identifikationsnummer(string)


>>>>> ['DE813992525',
 'DE813992526',
 'DE 813 992 526',
 'DE 813992526',
 'DE063005011000']

结果中的最后一个数字是德国 IBAN 号码的(第一部分),我不想提取它。如何避免?

【问题讨论】:

您可以缩短模式使空格可选\b(?:DE[0-9 ]12|DE ?[0-9]9)(?!\d) 并在regex101.com/r/PI0ABs/1 之后断言不是数字 也许r'\b(?:DE ?(?:\d3(?: \d3)2|[0-9]9))(?!\d| \d3(?!\d))' will be 更全面一点。 【参考方案1】:

您可以通过将空格设为可选来缩短交替。如果您不想要最后一个数字,但确实想要以点结尾的数字,则可以断言该模式后面没有数字。

\b(?:DE[0-9 ]12|DE ?[0-9]9)(?!\d)

Regex demo

对于第三个示例,您还可以使其更精确地匹配 3 乘以 3 个数字前面加上一个空格,因为 [0-9 ]12 也可能匹配 12 个空格。

\b(?:DE(?: \d3)3|DE ?[0-9]9)(?!\d)

Regex demo

【讨论】:

哦,我认为您的第二个示例效果很好。它不会提取像 DE06300501100011054517DE89 3704 0044 0532 0130 00DE12 1234 5678 0000 0123 45 这样的银行帐号。同时,我提取了所有其他相关模式。我必须再次检查它,但它看起来很有希望!

以上是关于避免从字符串中提取 IBAN 号码的主要内容,如果未能解决你的问题,请参考以下文章

如何在四个字符组中编辑 IBAN 号码?

swift code如何查询?

从 IBAN 号码生成 BIC 号码

从 emv 卡中获取 IBAN 号码

IBAN 掩码的正则表达式

InStr 和 Left 从字符串返回右文本的问题