Python 如何使用正则表达式从字符串中仅提取第三级域?
我是Python新手,目前正在尝试使用正则表达式。我只需要提取有效的第三级域。问题是,除了有效域之外,我还将第四级域的一部分作为第三级域。但我不想提取第四级域,甚至部分 如何解决这个问题?正则表达式中的错误在哪里 我的正则表达式: regex101的页面: 谢谢你们的帮助,伙计们 UPD:我不想使用像tldextract这样的模块来解决这个问题。对不起,伙计们,如果我让你们有点困惑的话 示例:thirdlevel.domain.com、3rd-level.my-domain.com、, fourth.level.domain.com。这最后一个域名是我不想看到的 摘录 您可以使用,即:Python 如何使用正则表达式从字符串中仅提取第三级域?,python,regex,python-3.x,Python,Regex,Python 3.x,我是Python新手,目前正在尝试使用正则表达式。我只需要提取有效的第三级域。问题是,除了有效域之外,我还将第四级域的一部分作为第三级域。但我不想提取第四级域,甚至部分 如何解决这个问题?正则表达式中的错误在哪里 我的正则表达式: regex101的页面: 谢谢你们的帮助,伙计们 UPD:我不想使用像tldextract这样的模块来解决这个问题。对不起,伙计们,如果我让你们有点困惑的话 示例:thirdlevel.domain.com、3rd-level.my-domain.com、, four
使用url解析模块(如tldextract)时会容易得多:
from tldextract import extract
urls = [
"thirdlevel.domain.com",
"ftp://thirdlevel.domain.com/index.php",
"3rdlevel.domain.com", "3rd-level.domain-my.COM.",
"fourth.level.domain.com", "domain.com"
]
for url in urls:
results = extract(url)
subdomain = results.subdomain
if subdomain:
# Just get the 3rd level domain:
third_level_domain = subdomain.split('.')[-1]
print(third_level_domain)
使用拆分:
s.split('//')[1].split('/')[0].split('.')[-3]
这个怎么样:
(?<!\.)\b[\w\-]+\.[\w\-]+\.\w+\b(?!\.)
演示:
你能举一个你到目前为止尝试过的例子吗?错误是什么?你希望它表现如何?你真的想在这里使用正则表达式吗?split方法看起来是一种更好的方法option@ArunKumar我在regex101的页面上留下了一个示例。但我可以给你看。示例:thirdlevel.domain.com、3rd-level.my-domain.com、4th.level.domain.com。最后一个域是我不想提取的。@Sam是的,我只想用正则表达式来解决这个问题。但是如果你觉得可以的话,你可以告诉我如何使用split处理这个问题。谢谢:您是只想从thirdlevel.domain.com中提取第三级域,例如thirdlevel,还是想验证一个域是否包含第三级aka子域?伙计们,谢谢你们的帮助,但是我如何解决更改正则表达式的问题?谢谢:这将在示例中所有不包含任何斜杠的URL上失败。我也很困惑,但它们在Slayer598的示例链接中:如果没有模式,您不可能有基于模式的解决方案,因此我假设URL将遵循基本RFC。如果你是投了否决票的人,我可以请你重新考虑一下吗?你可以将其更改为s.split'/'[-1]。split'/'[0]。split'.[-3]第一个从1到-1的拆分索引,以匹配不带斜杠的URL。
s.split('//')[1].split('/')[0].split('.')[-3]
(?<!\.)\b[\w\-]+\.[\w\-]+\.\w+\b(?!\.)