这是匹配网址的regEx。
我想要的是删除子域之后的点(。)。
因此,如果我输入http://www.abc.xyz.def.com
,我希望子域名为abc.xyz
,但我得到abc.xyz.
我只想用这个正则表达式来做这件事。
^((https?):\/\/)?(www\.)?(([A-z0-9]+\.)*)([A-z0-9]+\.[A-z]{2,4})(\/(.)*)?(\/?\?{0}|\/?\?{1}.*)$
答案 0 :(得分:2)
如果可以在子域名中至少要求2个字符,则可以按以下步骤操作:测试匹配组之后的点而不是结束时的点,并允许匹配组内的点为它们不是它的第一个或最后一个字符:
^((https?):\/\/)?(www\.)?([A-z0-9][A-z0-9\.]+[A-z0-9])\.([A-z0-9]+\.[A-z]{2,4})(\/(.)*)?(\/?\?{0}|\/?\?{1}.*)$
还要允许1个字符的子域名,添加?到比赛组的第二部分:
^((https?):\/\/)?(www\.)?([A-z0-9]([A-z0-9\.]+[A-z0-9])?)\.([A-z0-9]+\.[A-z]{2,4})(\/(.)*)?(\/?\?{0}|\/?\?{1}.*)$
编辑:
域之前的点现在在任何组之外,因此子域和域都不包含它。
答案 1 :(得分:0)
将.
从www.
后的捕获组移至下一组。您仍然可以将该.
内的[]
与www.foo.bar..baz.com
匹配,但在子域末尾不匹配,因为它在下一组中匹配(除非您有一个无效的域^((https?):\/\/)?(www\.)?([A-z0-9.]+)*(\.[A-z0-9]+\.[A-z]{2,4})(\/(.)*)?(\/?\?{0}|\/?\?{1}.*)$\
)。
for i in len(data):
....