我想用 Python 从文本中提取 IBAN 号码。这里的挑战是,IBAN 本身可以用多种方式编写,数字之间有空格,我发现很难将其转换为有用的正则表达式模式。
我写了一个演示版 https://regex101.com/r/PRDDaT/1它尝试匹配文本中的所有德国和奥地利 IBAN 号码。
^DE([0-9a-zA-Z]\s?){20}$
我在 stackoverflow 上看到过类似的问题。然而,结合不同的 IBAN 号码书写方式以及从文本中提取这些号码,使得解决我的问题变得非常困难。
希望你能帮助我!
|
ISO landcode |
Verification# |
Bank# |
Account# |
Germany |
2a |
2n |
8n |
10n |
Austria |
2a |
2n |
5n |
11n |
Note: a - alphabets (letters only), n - numbers (numbers only)
所以主要的区别实际上是数字的长度。这意味着你可以尝试:
\b(?:DE(?:\s*\d){20}|AT(?:\s*\d){18})\b(?!\s*\d)
看网上的demo https://regex101.com/r/PRDDaT/5.
-
\b
- 词边界。
-
(?:
- Open 1st non-capturing group.
-
DE
- 按字面意思匹配大写“DE”。
-
(?:
- Open 2nd non-capturing group.
-
\s*\d
- 零个或多个空格,最多一个数字。
-
){20}
- 关闭第2个非捕获组并匹配20次。
-
|
- Or:
-
AT
- 按字面意思匹配大写“AT”。
-
(?:
- Open 3rd non-capturing group.
-
\s*\d
- 零个或多个空格,最多一个数字。
-
){18}
- 关闭第2个非捕获组并匹配20次。
-
)
- 关闭第一个非捕获组。
-
\b
- 词边界。
-
(?!\s*\d)
- 负向前瞻以防止任何尾随数字。
它确实表明您的奥地利 IBAN 号码无效。如果您希望提取到它们仍然有效的程度,我想您可以删除\b(?!\s*\d)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)