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

标签 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"

类似下面的东西,但是很麻烦,因为我必须重复整个模式

re.findall("[^ ]*.cnn.[^ ]*|[^ ]*.espn.[^ ]*", u1)

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

re.findall("[^ ]*.cnn|espn.[^ ]*", u1)

但是现在它当然不起作用,因为我没有正确指定网站名称。如何才能做得更好?谢谢。

最佳答案

非捕获组允许您对字符进行分组,而无需将该组也作为匹配项返回。

cnn|espn 变为 (?:cnn|espn):

re.findall("[^ ]*\.(?:cnn|espn)\.[^ ]*", u1)

另请注意,. 是一个正则表达式特殊字符(它将匹配除换行符之外的任何字符)。要匹配 . 字符本身,您必须使用 \.

将其转义。

关于python - 如何将管道运算符用作正则表达式的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5773463/

相关文章:

python - 使用 Python、PyQt 和 Phonon 播放 mp3

java - 用唯一替换替换字符串中的所有实例

javascript - 用于大于 0 的数字的 Angular JS 指令

regex - 使用正则表达式 bash 将字符串提取到变量

python - 仅在通过点运算符访问时字典 AttributeError

python - 无法设置QTableView的行高

python - Django 应用程序安装脚本 - 如何将应用程序添加到 INSTALLED_APPS 设置?

php - 在 php 中使用正则表达式时出现奇怪的事情

regex - 我怎样才能重复一个 Perl 正则表达式直到没有任何变化?

python - 为什么python pandas不提供linux whl文件