正则表达式是错的还是我的代码?

时间:2015-09-12 15:18:55

标签: python regex

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。

2 个答案:

答案 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

Run this code online

或者,您可以使用regex module,并添加对Unicode属性的支持