我想用 Python 从文本中提取 IBAN 号码。这里的挑战是,IBAN 本身可以以多种方式编写,数字之间有空格,我发现很难将其转换为有用的正则表达式模式。
我写了一个 demo version它试图匹配文本中的所有德国和奥地利 IBAN 号码。
^DE([0-9a-zA-Z]\s?){20}$
我在stackoverflow上看到过类似的问题。但是,编写 IBAN 数字的不同方法以及从文本中提取这些数字的组合使我的问题很难解决。希望你能帮我解决这个问题!
最佳答案
ISO地区代码
确认#
银行#
帐户#
德国
2a
2n
8n
10n
奥地利
2a
2n
5n
11n
注: a - 字母(仅限字母),n - 数字(仅限数字)
所以主要的区别实际上是数字的长度。这意味着你可以尝试:
\b(?:DE(?:\s*\d){20}|AT(?:\s*\d){18})\b(?!\s*\d)
在线查看demo .\b
- 字边界。 (?:
- 打开第一个非捕获组。DE
- 从字面上匹配大写的“DE”。 (?:
- 打开第二个非捕获组。\s*\d
- 零个或多个空格最多为一位数。 ){20}
- 关闭第二个非捕获组并匹配 20 次。 |
- 或:AT
- 从字面上匹配大写的“AT”。 (?:
- 打开第三个非捕获组。\s*\d
- 零个或多个空格最多为一位数。 ){18}
- 关闭第二个非捕获组并匹配 20 次。 )
- 关闭第一个非捕获组。 \b
- 字边界。 (?!\s*\d)
- 负前瞻以防止任何尾随数字。 它确实表明您的奥地利 IBAN 号码无效。如果您希望提取到它们仍然有效的程度,我想您可以删除
\b(?!\s*\d)
关于python - 使用 Python 从文本中提取 IBAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65735039/