python - 使用 Python 从文本中提取 IBAN

标签 python regex pattern-matching iban

我想用 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/

    相关文章:

    python动态设置非实例类属性

    C# System.RegEx 在不应该匹配 LF 时匹配

    java - 在java中使用正则表达式进行模式搜索

    haskell - 模式匹配变量的范围

    emacs - 与 Eshell 不区分大小写匹配?

    python - 从启动进程获取窗口句柄

    python - Python中的多线程套接字,消息报错UniUnicodeDecodeError

    python - 避免在大型数据集上使用智能点/矩阵相乘进行迭代

    javascript - 分割字符串忽略 html 标签

    javascript - 嵌套捕获组结果