re.findall()返回集合列表

时间:2019-07-28 10:44:47

标签: python regex

我做了一个基本的正则表达式来查找网址:

([a-zA-Z0-9]+\.|)([a-zA-Z0-9\-])+\.[a-z]+[a-zA-Z0-9\?\/\=\-\_]*

([a-zA-Z0-9]+\.|)对于子域 ([a-zA-Z0-9\-])+作为主机名 \.[a-z]+用于域 [a-zA-Z0-9\?\/\=\-\_]*作为路径

当我运行此基本程序时

text = "test.google.com test.google.com"
urls = re.findall("([a-zA-Z0-9]+\.|)([a-zA-Z0-9\-])+\.[a-z]+[a-zA-Z0-9\?\/\=\-\_]*", text)
print(urls)

我得到这个输出 [('test.', 'e'), ('test.', 'e')]

我认为它与我的正则表达式有关,但是呢? 谢谢!

2 个答案:

答案 0 :(得分:0)

括号表示捕获组,这就是findall返回的内容

答案 1 :(得分:0)

因为当捕获组存在时,re.findall将返回所有捕获的字符。删除捕获组或将其变为非捕获组将返回所有匹配的字符。

(?:[a-zA-Z0-9]+\.)?[a-zA-Z0-9\-]+\.[a-z]+[a-zA-Z0-9\?\/\=\-\_]*

https://regex101.com/r/efXF9D/1/

如果要分别捕获每个部分,则必须为每个部分使用适当的捕获组。

(?:([a-zA-Z0-9]+)\.)?([a-zA-Z0-9\-]+)\.([a-z]+)([a-zA-Z0-9\?\/\=\-\_]*)

https://regex101.com/r/efXF9D/2/