import re
def street_regex(street):
street_regex = ""
regex = re.compile("^(\p{L}[\p{L} -]*\p{L}(?: \d{1,4}(?: ?[A-Za-z])?)?\b)")
s = regex.search(street)
if s:
street_regex = s.group()
else:
street_regex = street
return street_regex
这就是我的代码。从我的previous posts之一,我得到了我在代码中使用的正则表达式。但是,如果我调用我的函数,那么正则表达式不会工作,我不会得到我想要的。 (参见上一篇文章,了解我的意思)。如果有帮助,我正在使用Python 3.4。
答案 0 :(得分:1)
您需要使用regex
模块。你的正则表达式是正确的,但python的默认正则表达式模块re
将不支持这些\p{L}
,\p{N}
种pcre正则表达式模式。您可以使用[a-zA-Z]
代替\p{L}
re
,但它必须支持英文字母而不支持任何语言的任何字母(\p{L}
)。
>>> import regex
>>> re.search(r'\p{L}+', 'foo')
>>> regex.search(r'\p{L}+', 'foo')
<regex.Match object; span=(0, 3), match='foo'>
>>>
答案 1 :(得分:0)
re.UNICODE
不支持Unicode属性。但是,如果设置\w
标志,则[^\W\d_]
匹配所有脚本中的字母数字。因此,\p{L}
仅匹配字母,与预期的\W
匹配。
Letter category
匹配非字词(不包括Number category
,_
和“\d
”)Number category
匹配[^\W\d_]
_
会匹配除非字字符,数字或“#python 3.4.3
import re
str = u"Stréêt -Name 123S"
r = re.compile(r'^([^\W\d_](?:[^\W\d_]|[- ])*[^\W\d_](?: [0-9]{1,4}(?: ?[A-Za-z])?)?\b)', re.UNICODE)
s = r.search(str)
print(s.group())
”之外的任何内容......这意味着它只会匹配字母<强>代码:强>
application_readable: true
或者,您可以使用regex module
,并添加对Unicode属性的支持