正则表达式街道地址模式

2024-10-01 15:33:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件,其中包含大量数据,包括街道地址。 我试图通过构造一个正则表达式来提取地址。在

地址格式如下: “路虎街34号” 或 “下坡路432号”

所以总是1到3个数字,然后是1个空格,然后是1到N个用空格隔开的单词。没有标点符号。注意单词可以有带重音的字母。这就是为什么我把unicode代码放在正则表达式中的原因。在

到目前为止,我的正则表达式是这样的: [0-9]{1,2}\s([a-zA-Z\u00C0-\u017F]+\s*)+

但最后我得到的文本数据如下所示: “34 44 55 rue du therne,04 84 98” 我希望正则表达式只匹配:“55 rue du therne”

但是我当前的表达式也匹配地址周围的文本。 我正在尝试http://rubular.com/上的内容,但似乎无法正确完成以完成我需要的操作。在

任何帮助都将不胜感激。对不起,我对正则表达式没有经验。在


Tags: 数据文本地址格式数字街道单词空格
1条回答
网友
1楼 · 发布于 2024-10-01 15:33:55

re模块的解决方案

由于Python不支持简单语法来匹配Unicode字母类别中的任何字符,因此我们必须列出包含我们希望允许的字符的范围。在

\b\d{1,3}(?:\s[a-zA-Z\u00C0-\u017F]+)+

样本运行:

^{2}$

^{} module的解决方案

但是,上述解决方案不能扩展到不同语言的字符。如果您不介意安装外部的^{}模块,那么您可以使用\p{L}来匹配来自任何语言的任何字母。在

\b[0-9]{1,3}(?:\s\p{L}+)+

[0-9]{1,3}匹配一位、两位或三位数字。\s\p{L}+匹配空格和一个或多个字母。同样地,非捕获组之后的(?:\s\p{L}+)++将在非捕获组内重复该模式一次或多次。在

Demo

要使用它,您需要导入regex模块,而不是re模块。在

>>> reg = regex.compile(r'\b[0-9]{1,3}(?:\s\p{L}+)+')
>>> reg.search("xxx 35 rue Hote de ma maison, 060 06 ").group(0)
'35 rue Hote de ma maison'
>>> reg.search('"xxx 34 rue Roveré').group(0)
'34 rue Roveré'

相关问题 更多 >

    热门问题