如何从文本中提取所有域?

Chr*_*all 1 python regex

我需要从字符串中提取域。我有一个有效的正则表达式,已经过测试,但是我无法让它与以下代码一起使用。可能我在这里缺少一些明显的东西

mytext = "I want to extract some domains like foo.com, bar.net or http://foobar.net/ etc"
myregex = r'^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$'
foo = re.findall(myregex, mytext)
print foo
Run Code Online (Sandbox Code Playgroud)

当我想要类似的东西时,我只是打印出一个空列表

['foo.com','bar.net','foobar.net']
Run Code Online (Sandbox Code Playgroud)

谢谢。

Mar*_*ers 7

删除锚点,并使组不捕获:

r'(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-]{,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}'
Run Code Online (Sandbox Code Playgroud)

^锁定您的表达式以$匹配整个字符串。当模式包含捕获组时也会改变行为;您想在此处列出整个比赛,这要求不存在此类组。是捕获组,是非捕获组。re.findall()(...)(?:...)

演示:

>>> myregex = r'(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-]{,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}'
>>> re.findall(myregex, mytext)
['foo.com', 'bar.net', 'foobar.net']
Run Code Online (Sandbox Code Playgroud)