Python 要匹配域名的正则表达式

Python 要匹配域名的正则表达式,python,regex,Python,Regex,我尝试了上面的代码,但它不会匹配任何领域,无论多么丑陋 我正在尝试只匹配单词和以.com结尾的域 ^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$ 我经常在结尾使用$时遇到问题,因此我会在^之后和$运算符之前添加\s*,以检测前导/尾随分隔符。在不了解上下文的情况下,不能进行太多的推理 Like google.com yahoo.com bing.com Not google.net google.con googl-e.com -[a-z0-9]+小组的目

我尝试了上面的代码,但它不会匹配任何领域,无论多么丑陋

我正在尝试只匹配单词和以.com结尾的域

^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$

我经常在结尾使用$时遇到问题,因此我会在^之后和$运算符之前添加\s*,以检测前导/尾随分隔符。在不了解上下文的情况下,不能进行太多的推理

Like 
google.com
yahoo.com
bing.com

Not 
google.net
google.con
googl-e.com

-[a-z0-9]+
小组的目的是什么?我有六个测试用例要通过:

^\s*([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}\s*$

您的代码不匹配,因为它使用了与字符串开头和结尾匹配的
^
$
。要使其与行的开始和结束匹配,必须启用多行选项
re.M
。此外,使用
re.I
使其不区分大小写,我认为域名是不区分大小写的

根据您的要求:
  • .com
  • 没有破折号
  • 没有数字
  • 代码

    import re
    r = re.compile("^([a-z0-9]+\.)com$")
    
    # Like
    assert r.match('google.com')
    assert r.match('yahoo.com')
    assert r.match('bing.com')
    
    # Not 
    assert not r.match('google.net')
    assert not r.match('google.con')
    assert not r.match('googl-e.com')
    
    要分解它:

    import re
    regex = re.compile(r'^[a-z]+\.com$' , re.M | re.I)
    
    print(regex.findall("""\
    google.com
    yahoo.com
    bing.com
    google.net
    google.con
    googl-e.com
    """))
    
    # => ['google.com', 'yahoo.com', 'bing.com']
    

    e.com
    仅为单词,以
    .com
    结尾。这不应该包括在内吗?正则表达式匹配所有6个示例。那么“它不匹配任何域”是什么意思呢?请发布更多的代码。您是否正在使用
    re
    模块?如果是的话,你用什么函数来查找域名?我试图匹配没有数字和破折号的域名。像google.com,而不是像goo-gle.com或googl2.com。绘制代码只匹配第一行这将匹配任何TLD。OP只需要.com。
    ^        # To mark the start of line/string
    [a-z]+   # One or more alphabet
    \.       # match the `.` character
    com      # match the `com` string