Python2重新匹配重复模式的行为不符合预期

时间:2017-08-30 07:08:52

标签: regex python-2.7

我试图使用正则表达式从凌乱的文本数据中提取网址。我过去常常匹配[\w.]+[a-zA-Z]{2,4}表现出我预期的行为:找到连续的字母数字和点,然后以2~4个字母结束,如com / net / gov。它不完美但足以供我使用。 现在我想改进一下语法:我想找到所有字母数字由一个点组成,多次重复该模式,然后以2~4个字母结束。这会排除"abc....com"之类的内容。但是,这次结果让我很困惑:

test = 'www.1f23123.asda.com'
re.findall(r'(\w+\.){1,}[a-zA-Z]{2,4}', test)

,结果为['asda.'] 有人可以向我解释这里出了什么问题吗?

2 个答案:

答案 0 :(得分:0)

您正在打印捕获的组,尝试添加?:使其成为非捕获组,以便打印整个匹配

test = 'www.1f23123.asda.com'
match = re.findall(r'(?:\w+\.){1,}[a-zA-Z]{2,4}', test)
print match

答案 1 :(得分:0)

您的正则表达式使用重复捕获组,您需要捕获重复组。所以只有你的正则表达式中捕获的最后一个匹配。你需要:

((?:\w+\.){1,})[a-zA-Z]{2,4}

请参阅example