我有以下正则表达式:
r'(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-]{,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}'
当我将其应用于文本字符串时,比方说,
“这是 www.website1.com,这是 website2.com”,我得到:
['www.website1.com']
['website.com']
我如何修改正则表达式以排除'www
',这样我就得到'website1.com'
and 'website2.com
?我错过了一些非常基本的东西......
试试这个(感谢@SunDeep 的更新):
\s(?:www.)?(\w+.com)
解释
\s
匹配任何空白字符
(?:www.)?
非捕获组,比赛www.
0次或多次
(\w+.com)
匹配任何单词字符一次或多次,后跟.com
并在行动中:
import re
s = 'this is www.website1.com and this is website2.com'
matches = re.findall(r'\s(?:www.)?(\w+.com)', s)
print(matches)
Output:
['website1.com', 'website2.com']
关于这一点有几点说明。首先,匹配所有有效域名是非常困难的,所以虽然我选择使用\w+
为了捕捉这个例子,我可以选择类似的东西:[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}
.
这个答案有很多关于匹配域的有用信息:什么是匹配不带子域的有效域名的正则表达式? https://stackoverflow.com/questions/10306690/what-is-a-regular-expression-which-will-match-a-valid-domain-name-without-a-subd
接下来我只寻找.com
域,您可以将我的正则表达式调整为:
\s(?:www.)?(\w+.(com|org|net))
匹配您正在寻找的任何类型的域名。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)