我希望以下正则表达式匹配包含子域但不匹配没有子域的URL的URL:
"^https?://(?:www\.)?(.*\.lexpress\.fr).*"
即匹配:
http://blah.lexpress.fr/whatever/test.html
不匹配:
http://www.lexpress.fr/whatever/test.html
我在Java和Python中尝试过并且两个URL匹配 - 为什么会这样,我如何才能将表达式更改为仅匹配第一个。
谢谢,
/大卫
答案 0 :(得分:2)
您需要negative look-ahead assertion:
"^https?://(?!www\.)(.*\.lexpress\.fr).*"
这匹配www.
个字符后没有 ://
的任何字符串。
Python演示:
>>> import re
>>> subdomain = re.compile(r"^https?://(?!www\.)(.*\.lexpress\.fr).*")
>>> subdomain.match('http://www.lexpress.fr') is None
True
>>> subdomain.match('http://lexpress.fr') is None
True
>>> subdomain.match('http://subdomain.lexpress.fr').groups()
('subdomain.lexpress.fr',)
>>> subdomain.match('https://nested.subdomain.lexpress.fr').groups()
('nested.subdomain.lexpress.fr',)
答案 1 :(得分:1)
您可以使用:
import re
p = re.compile(r'^https?://((?!www\.).*\.lexpress\.fr).*')
m = p.match('https://www.lexpress.fr')
print m
>>> None
m = p.match('https://abc.lexpress.fr')
print m.group()
>>> 'https://abc.lexpress.fr.com'
答案 2 :(得分:-1)
试试这个
^(http[s]?://)?(www\.)?[a-zA-Z0-9-\.]+\.(com|org|net|mil|edu|ca|co.uk|com.au|fr|gov|br)\\?[a-zA-Z0-9-\.]*$
你可以匹配任何网址 我们可以测试:test regex here