Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python可以';t在字符串的末尾匹配单词(正则表达式模块)_Python_Regex_Python 2.6 - Fatal编程技术网

Python可以';t在字符串的末尾匹配单词(正则表达式模块)

Python可以';t在字符串的末尾匹配单词(正则表达式模块),python,regex,python-2.6,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匹配良好,但当线路为“ASDASDAS dfgdfgdf 223-356-7890”时,它

我有以下代码:

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匹配良好,但当线路为“ASDASDAS dfgdfgdf 223-356-7890”时,它与任何内容都不匹配。有什么问题吗?
我试过了,但它与我的python不匹配。问题是,在您的示例中,数字序列前面有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:您可以看到,对于第二个示例,第一个字符不匹配,这导致python不匹配

一个更灵活的解决方案可能是
(.*)(\d{2,4})[^\d]{1,5}(\d{3,4})[^\d]{1,5}(\d{4,6})(.*)

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


比如:

试试这个
(.{0,21})\b(.{2,4})[^\d]{1,5}(\d{3,4})[^\d]{1,5}(\d{4,6})\b(.{0,20})
regex。你到底希望输出是什么?我想让它匹配@JonClements的意思是,如果你向我们提供预期的输出,regex可能会变得更简单、更可读。