适用于德国税号的Python正则表达式

时间:2020-10-23 08:22:45

标签: python regex

我需要帮助来完成德国税号的正则表达式。这些数字的格式取决于状态。我可以匹配几乎所有州。剩下的只有黑森州和不来梅州。问题在于,它们与其他号码(例如电话号码)非常相似。我的demo中有一个完整的示例。

也许您可以帮我,以匹配所有相关数字。

这是我的正则表达式:

(?:\d{3}\s?/\s?\d{3}\s?/\s?\d{5})|(?:\d{2}\s?/\s?\d{3}\s?/\s?\d{5})|(?:\d{3}\s?/\s?\d{4}\s?/\s?\d{4})|(?:\d{5}\s?/\s?\d{5}\b)|(\d{11})|(\d{10})

这些是为完成所有状态的正则表达式所剩下的关键模式:

Hessen: 02581580201
025 815 80201

Bremen: 7581508152
75 815 08152

1 个答案:

答案 0 :(得分:2)

您可以在可选的空白字符之间匹配/,也可以使用(?:\s?/\s?|\s)匹配空白字符

末尾的部分可以缩短为\d{10,11}

前2个部分可以缩写为d{2,3}\s?/\s?\d{3}\s?/\s?\d{5}

\b(?:\d{2,3}(?:\s?/\s?|\s)\d{3}(?:\s?/\s?|\s)\d{5}|\d{3}(?:\s?/\s?|\s)\d{4}(?:\s?/\s?|\s)\d{4}|\d{5}(?:\s?/\s?|\s)\d{5}|\d{10,11})\b

说明

  • \b单词边界,以防止匹配项成为较大单词的一部分
  • (?:非捕获组
    • \d{2,3}(?:\s?/\s?|\s)\d{3}(?:\s?/\s?|\s)\d{5}匹配2-3位数字,然后匹配3位数字和5位数字
    • |
    • \d{3}(?:\s?/\s?|\s)\d{4}(?:\s?/\s?|\s)\d{4}匹配3位数,4位数和4位数
    • |
    • \d{5}(?:\s?/\s?|\s)\d{5}|\d{10,11}匹配5位数字,5位数字和10位或11位数字
  • )关闭非捕获组
  • \b单词边界

Regex demo

如果数字之间的部分应该匹配,则还可以使用具有反向引用的捕获组来将第二部分中的内容与第一部分中已捕获的内容进行匹配。

相关问题