Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用正则表达式从字符串中仅提取第三级域?_Python_Regex_Python 3.x - Fatal编程技术网

Python 如何使用正则表达式从字符串中仅提取第三级域?

Python 如何使用正则表达式从字符串中仅提取第三级域?,python,regex,python-3.x,Python,Regex,Python 3.x,我是Python新手,目前正在尝试使用正则表达式。我只需要提取有效的第三级域。问题是,除了有效域之外,我还将第四级域的一部分作为第三级域。但我不想提取第四级域,甚至部分 如何解决这个问题?正则表达式中的错误在哪里 我的正则表达式: regex101的页面: 谢谢你们的帮助,伙计们 UPD:我不想使用像tldextract这样的模块来解决这个问题。对不起,伙计们,如果我让你们有点困惑的话 示例:thirdlevel.domain.com、3rd-level.my-domain.com、, four

我是Python新手,目前正在尝试使用正则表达式。我只需要提取有效的第三级域。问题是,除了有效域之外,我还将第四级域的一部分作为第三级域。但我不想提取第四级域,甚至部分

如何解决这个问题?正则表达式中的错误在哪里

我的正则表达式:

regex101的页面:

谢谢你们的帮助,伙计们

UPD:我不想使用像tldextract这样的模块来解决这个问题。对不起,伙计们,如果我让你们有点困惑的话

示例:thirdlevel.domain.com、3rd-level.my-domain.com、, fourth.level.domain.com。这最后一个域名是我不想看到的 摘录

您可以使用,即:


使用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(?!\.)