Python 要匹配域名的正则表达式
我尝试了上面的代码,但它不会匹配任何领域,无论多么丑陋 我正在尝试只匹配单词和以.com结尾的域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]+小组的目
^([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