Python 如何将多个正则表达式组合成一行?

Python 如何将多个正则表达式组合成一行?,python,regex,python-2.7,Python,Regex,Python 2.7,我的脚本可以很好地执行以下操作: images = re.findall("src.\"(\S*?media.tumblr\S*?tumblr_\S*?jpg)", doc) videos = re.findall("\S*?(http\S*?video_file\S*?tumblr_[a-zA-Z0-9]*)", doc) 但是,我认为在整个文档中搜索两次是低效的 以下是一个示例文档(如果有帮助): 我预计上述项目将产生以下结果: images = http://37.media.tumbl

我的脚本可以很好地执行以下操作:

images = re.findall("src.\"(\S*?media.tumblr\S*?tumblr_\S*?jpg)", doc)
videos = re.findall("\S*?(http\S*?video_file\S*?tumblr_[a-zA-Z0-9]*)", doc)
但是,我认为在整个文档中搜索两次是低效的

以下是一个示例文档(如果有帮助):

我预计上述项目将产生以下结果:

images = http://37.media.tumblr.com/tumblr_lnmh4tD3sM1qi02clo1_500.jpg
videos = http://bassrx.tumblr.com/video_file/86319903607/tumblr_lo8i76CWSP1qi02cl
相反,最好采取以下措施:

image_and_video_links = re.findall(" <match-image-links-or-video links> ", doc)
image\u和\u video\u links=re.findall(“,doc)
如何将这两行
re.findall
合并为一行?


我尝试过使用
|
字符,但总是无法匹配任何内容。因此,我确信我完全搞不清楚如何正确使用它。

正如评论中提到的,
一根管道(|)应该可以做到这一点

正则表达式

(src.\"(\S*?media.tumblr\S*?tumblr_\S*?jpg))|(\S*?(http\S*?video_file\S*?tumblr_[a-zA-Z0-9]*))
捕捉两种模式中的任何一种


如果您真的想要高效,请在

上演示

首先,我会在第二个正则表达式中删去
\S*?
。除了提供大量回溯的机会之外,它没有任何用途

src.\"(\S*?media.tumblr\S*?tumblr_\S*?jpg)|(http\S*?video_file\S*?tumblr_[a-zA-Z0-9]*)
其他想法

您可以通过在第一个组中使用一个小的lookback来删除捕获组,从而可以删除所有括号并直接匹配所需内容。不是更快,而是更整洁:

(?<=src.\")\S*?media.tumblr\S*?tumblr_\S*?jpg|http\S*?video_file\S*?tumblr_[a-zA-Z0-9]*

为什么不使用
|
操作符发布您的尝试?这就是方法。使用管道
|
字符似乎可以达到目的。你能编辑你的问题来展示你是如何使用它的吗?我认为你的例子链接的哲学和宗教性质是在你的帖子中使用虚假URL的原因。然而,我真的不在乎。
(?<=src.\")\S*?media.tumblr\S*?tumblr_\S*?jpg|http\S*?video_file\S*?tumblr_[a-z0-9]*