我做了一个基本的正则表达式来查找网址:
([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')]
我认为它与我的正则表达式有关,但是呢? 谢谢!
答案 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\?\/\=\-\_]*)