Python不能匹配字符串中的单词(正则表达式模块)

时间:2014-08-12 11:36:37

标签: python regex python-2.6

我有以下代码:

p = re.compile(ur'(.{0,20})\b(\d{2,4})[^\d]{1,5}(\d{3,4})[^\d]{1,5}(\d{4,6})\b(.{0,20})', re.IGNORECASE)
test_str = u"223-356-7890 asdasdasdas dfgdfgdf"

print re.match(p, test_str)

它匹配223-356-7890好,但当行"asdasdasdas dfgdfgdf 223-356-7890"时,它不匹配任何东西。问题是什么? 我试过http://regex101.com/,它匹配但不在我的python中

1 个答案:

答案 0 :(得分:0)

问题在于,在您的示例中,您在数字序列之前有21个字符:

  re.match(ur"(.{0,20})\b(\d{2,4})[^\d]{1,5}(\d{3,4})[^\d]{1,5}\b(.{0,20})",
  "asdasdasdas dfgdfgdf 223-356-7890") 

导致不匹配,但

  re.match(ur"(.{0,21})\b(\d{2,4})[^\d]{1,5}(\d{3,4})[^\d]{1,5}\b(.{0,20})",
  "asdasdasdas dfgdfgdf 223-356-7890") 

匹配。这是因为在第一个选项中最多需要20个字符才能匹配。在regex101:http://regex101.com/r/fN3zU5/27上你可以看到,对于第二个例子,第一个字符不匹配,导致python不匹配。

可能会有更灵活的解决方案  (.*?)(\d{2,4})[^\d]{1,5}(\d{3,4})[^\d]{1,5}(\d{4,6})(.*)http://regex101.com/r/fN3zU5/28

或者如果您在找到数字序列后对剩余的字符串不感兴趣,可以使用: (.*?)(\d{2,4})[^\d]{1,5}(\d{3,4})[^\d]{1,5}(\d{4,6})(.*?)

喜欢上:http://regex101.com/r/fN3zU5/29