python - 使用 Python 从文本中提取 IBAN
问题描述
我想用 Python 从文本中提取 IBAN 号码。这里的挑战是,IBAN 本身可以以多种方式编写,数字之间有空格,我发现很难将其翻译成有用的正则表达式模式。
我编写了一个演示版本,它试图匹配文本中的所有德国和奥地利 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)
请参阅在线演示。
\b
- 字边界。(?:
- 打开第一个非捕获组。DE
- 从字面上匹配大写“DE”。(?:
- 打开第二个非捕获组。\s*\d
- 零个或多个空格,最多一位数。){20}
- 关闭第2个非捕获组并匹配20次。
|
- 或者:AT
- 从字面上匹配大写“AT”。(?:
- 打开第三个非捕获组。\s*\d
- 零个或多个空格,最多一位数。){18}
- 关闭第2个非捕获组并匹配20次。
)
- 关闭第一个非捕获组。
\b
- 字边界。(?!\s*\d)
- 负前瞻以防止任何尾随数字。
它确实表明您的奥地利 IBAN 号码无效。如果您希望提取到它们仍然有效的程度,我想您可以删除\b(?!\s*\d)
推荐阅读
- tensorflow - 无法通过 pip3 安装 TensorFlow
- powershell - 使用 -TakeSourcePageName 时不会重命名现代页面
- android - 我可以在观察者中添加观察者吗?我实际上尝试过,但内部观察者无法正常工作。有时其中一个工作,有时没有一个工作
- laravel - Laravel api auth:sanctum 是否可以用于 ajax 请求(非 spa 网站)
- database - MongoDB 从多个文档中提取子文档数组值
- python - 如何将 X min, Y sec 字符串转换为时间戳
- docker - 覆盖网络首先创建的泊坞窗在哪里,在经理或工人上?
- wordpress - wordpress 上 mailgun 插件的严重错误
- reactjs - 如何将默认反应上下文值设置为来自 Firestore 的数据?
- google-chrome - 为什么加载 mp3 广播流时 Google Chrome 会延迟?