gpt4 book ai didi

从文本中提取域的 Python 正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 00:20:51 24 4
gpt4 key购买 nike

我有以下正则表达式:

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''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)

输出:

['website1.com', 'website2.com']

关于此的一些注意事项。首先,匹配所有有效域名非常困难,因此虽然我选择使用 \w+ 来捕获此示例,但我可以选择类似这样的内容:[a-zA -Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}.

这个答案有很多关于匹配域的有用信息: What is a regular expression which will match a valid domain name without a subdomain?

接下来,我只查找 .com 域,您可以将我的正则表达式调整为:

\s(?:www.)?(\w+.(com|org|net))

匹配您要查找的任何类型的域。

关于从文本中提取域的 Python 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49166524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com