我希望使用python获得给定字符串中的所有域名。 我试过下面的方法,但我没有得到预期的o/p
str = "ctcO6OgnWRAxLtu+akRCFwM asu.edu zOiV6Wo6nDnUhQkZO4XTySrTRwLMgozM9R/LyQs2r+Pb tarantino.cs.ucsb.edu,128.111.48.123 ssh-rsa 9SMF4U+qJW03Bh1"
list = re.findall(r'([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+[a-z]{2,10}', str)
print list
我希望输出为:
^{pr2}$但我得到的是:
[('asu.', ''), ('ucsb.', '')]
我错过了什么?在
使用
(?:...)
创建非捕获组。当模式包含多个分组模式(即用括号括起来的模式)时,re.findall
为每个匹配项返回一个元组。要防止re.findall
返回元组列表,请使用非捕获组。对于您发布的}是不必要的。在
^{pr2}$text
,模式{text
中没有文字-
,因此(-[a-zA-Z0-9]+)*
从不匹配text
中的任何内容。当然,如果您愿意,您可以将(?:-[a-zA-Z0-9]+)*
添加到模式中(注意使用了非捕获组(?:...)
),但是您发布的text
并没有执行该部分模式。它可以让你把名字和海普思匹配起来,但是:作为Aprillion noted:
请参见regex101以获得模式
(?:[a-zA-Z0-9]+\.)+[a-z]{2,10}
这应该是有效的:
正如Gavin指出的,不应该使用}作为变量名,因为它们是Python中的内置类型。在
str
和{相关问题 更多 >
编程相关推荐