关于芬德尔()返回集合列表

2024-04-26 02:39:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

([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')]

我想这和我的正则表达式有关,但是什么? 谢谢!你知道吗


Tags: 子域texttest路径程序recomurl
2条回答

因为关于芬德尔当捕获组存在时,将返回所有捕获的字符。移除捕获组或将其转换为非捕获组将返回所有匹配的字符。你知道吗

(?:[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/

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

相关问题 更多 >