如何将管道运算符用作正则表达式的一部分?

cei*_*cat 6 python regex

我想匹配字符串中的url

u1 = "Check this out http://www.cnn.com/stuff lol"
u2 = "see http://www.cnn.com/stuff2"
u3 = "http://www.espn.com/stuff3 is interesting"
Run Code Online (Sandbox Code Playgroud)

像下面这样的东西,但它很麻烦,因为我必须重复整个模式

re.findall("[^ ]*.cnn.[^ ]*|[^ ]*.espn.[^ ]*", u1)
Run Code Online (Sandbox Code Playgroud)

特别是,在我的真实代码中,我想匹配更多的网站.理想情况下,我可以做类似的事情

re.findall("[^ ]*.cnn|espn.[^ ]*", u1)
Run Code Online (Sandbox Code Playgroud)

但当然它现在不起作用,因为我没有正确指定网站名称.怎么能做得更好?谢谢.

Ign*_*ams 6

非分组匹配.

re.findall("[^ ]*.(?:cnn|espn).[^ ]*", u1)
Run Code Online (Sandbox Code Playgroud)

  • 我称之为"非分组括号"; "匹配"这个词只是令人困惑,因为RE也在不同的意义上使用它. (2认同)