^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$
我尝试了上面的代码,但无论多么丑陋都无法与任何域匹配。
我尝试仅将字段与单词匹配,并以.com
结尾Like
google.com
yahoo.com
bing.com
Not
google.net
google.con
googl-e.com
答案 0 :(得分:1)
-[a-z0-9]+
群组的目的是什么?我得到了你的六个测试用例:
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')
答案 1 :(得分:0)
您的代码与之匹配,因为它使用匹配字符串开头和结尾的^
和$
。要使其与行的开头和结尾匹配,您必须启用多行选项re.M
。另外,使用re.I
使其不区分大小写,我相信域名是。
.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']
要将其分解:
^ # To mark the start of line/string
[a-z]+ # One or more alphabet
\. # match the `.` character
com # match the `com` string
答案 2 :(得分:-1)
我经常遇到$的问题,所以我在^之后和$运算符之前添加\ s *来检测前导/尾随分隔符。如果不了解背景,就无法推理太多。
^\s*([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}\s*$