我需要匹配表单的地址:1-3个数字,然后是空格,然后是用空格分隔的几个单词(字母)。
这些字词可以包含重音符(é
,è
,ê
等),这些字词可以包含破折号(-
)
示例:
xxyz 01 02 03 04 123 allée pont-du-nord de la foret, 01 02 03
只需匹配:
123 allée pont-du-nord de la forêt
我目前使用Python re
模块的正则表达式:
\b\d{1,3}(?:\s[a-zA-Z\u00C0-\u017F]+)+'
这适用于地址,但它也匹配电话号码(我不想这样),如:
01 02 03 04 05 06
我需要正则表达式强制执行以下事实:字符串有一个数字,后跟一个空格,后跟一个或多个单词(可以包含短划线-
),单词用空格分隔。< / p>
答案 0 :(得分:0)
您可以尝试下面的内容,
>>> s = 'xxyz 01 02 03 04 123 allée pont-du-nord de la foret, 01 02 03'
>>> re.search(r'(?!\b\d+\s+\d+)\b\d{1,3}(?:\s[a-zA-Z\u00C0-\u017F-]+)+', s).group()
'123 allée pont-du-nord de la foret'
我刚刚对原始正则表达式做了两处修改。
(?!\b\d+\s+\d+)
这个开头的负面预测断言,在开始时没有一个或多个数字字符后跟一个空格和一个数字。这使我们的正则表达式不匹配09 89
\u00C0-\u017F-
通过在字符类中添加连字符,字符类中的模式不仅匹配字母或数字,还匹配连字符。
或强>
>>> re.search(r'\b\d{1,3}(?:(?!\d)\s[a-zA-Z\u00C0-\u017F-]+)+', s).group()
'123 allée pont-du-nord de la foret'
答案 1 :(得分:0)
此正则表达式在您的测试字符串中找到您想要的匹配项:
\b\d{1,3}\s[a-zA-Zéèê -]+\b
连字符必须位于字符类的末尾,才能算作范围运算符。
编辑哦Python 2 ...你走了:
r=re.compile(r"\b\d{1,3}\s(\w|[' -])+\b", re.UNICODE)