python - 用于德国税号的 Python 正则表达式
问题描述
我需要帮助来完成我的德国税号正则表达式。这些数字的格式取决于州。我几乎可以匹配所有的州。剩下的州只有黑森州和不来梅州。问题是,它们与其他号码(如电话号码)非常相似。我的演示中有一个完整的示例。
也许你可以帮助我,匹配所有相关的数字。
这是我的正则表达式:
(?:\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
解决方案
您可以/
在可选的空白字符之间进行匹配,也可以使用匹配空白字符(?:\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
一个词的边界
如果数字之间的部分应该匹配,您还可以使用带有反向引用的捕获组来匹配第二部分中已经在第一部分中捕获的内容。
推荐阅读
- python - 如何使用交互式绘图(plt.show() 的输出)等完整信息保存 Python 绘图?
- c# - '图像解码失败。提供的图像必须是位图' - Google Map Marker 上的 SetIcon 引发错误
- google-cloud-platform - 如何在goole云中将巨大的json从实例传输到Bigtable
- clojure - 使用“时间”测量在 Clojure 中的未来内部执行的进程的时间
- python - 如何通过 python 格式化我的 pandas 数据框以获取 csv 输出中的列?
- javascript - 您如何唯一地定位函数实例的 html/css?
- css - Flexbox:如何让子 1 具有其内容的宽度,而子 2 填充其余的宽度
- jquery - 提交表单后如何在就绪事件中传递函数
- system - 如何修复“VSTest.Console.exe”不被识别为内部或外部命令
- java - 在创建的 sqlite 数据库中更新整行(包含多列)