【问题标题】:Python Regex for German tax numbers用于德国税号的 Python 正则表达式
【发布时间】:2021-02-06 07:25:39
【问题描述】:

我需要帮助来完成我的德国税号正则表达式。这些数字的格式取决于州。我几乎可以匹配所有的州。剩下的州只有黑森州和不来梅州。问题是,它们与其他号码(如电话号码)非常相似。我的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

【问题讨论】:

  • 你可以在最后省略(\d{11})|(\d{10}) 对吧?还是应该 02581580201025 815 80201 匹配?
  • 如果我删除了我的正则表达式 |(\d{11})|(\d{10}) 的最后一部分,它仍然与黑森州和不来梅州的数字不匹配
  • 对于这些值,您可以在可选的空白字符之间匹配/,或单个空白字符\b(?:\d{3}(?:\s?/\s?|\s)\d{3}(?:\s?/\s?|\s)\d{5}|\d{2}(?:\s?/\s?|\s)\d{3}(?:\s?/\s?|\s)\d{5}|\d{3}\s?/\s?\d{4}\s?/\s?\d{4}|\d{5}(?:\s?/\s?|\s)\d{5}|\d{10,11})\b,然后将它们放在由单词边界包围的1 个交替中。 regex101.com/r/RaICQa/1
  • 请告诉我实际输入及其预期输出。
  • @PParker 在某些情况下,您实际上是在使用 | 作为量词,例如(\d{11})|(\d{10})。使用量词,这看起来像\d{10,11}。是否使用量词,由你决定,但我认为有必要指出。

标签: python regex


【解决方案1】:

您可以在可选的空白字符之间匹配/,或者使用(?:\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

如果数字之间的部分应该匹配,您还可以使用带有反向引用的捕获组来匹配第二部分中已在第一部分中捕获的内容。

【讨论】:

    猜你喜欢
    • 2017-05-23
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 2015-11-22
    相关资源
    最近更新 更多