【发布时间】:2017-03-01 05:21:42
【问题描述】:
我正在编译以下模式:
pattern = re.compile("media.+\.(aac|ts)")
我的想法是获取包含在字符串中的 .ts 和 .aac 媒体文件。 媒体文件名可以是 media-u9xuxtkay_213.aac 或 media-u9xuxtkay_213.ts
根据这个接受的答案Python regular expressions OR,您可以使用 (|) 作为 OR 但我不明白这是一个可以接受的答案,因为它似乎对我有用:
In [23]: s
Out[23]: 'Sent from my iPhone'
In [24]: patt = re.compile("Sent from my (iPhone|iPod)")
In [25]: patt.findall(s)
Out[25]: ['iPhone']
所以我打电话给 findall,我得到了这个:
In [37]: media
Out[37]: 'media-u9xuxtkay_213.aac'
In [38]: pattern = re.compile("media.+\.(aac|ts)")
In [39]: pattern.findall(media)
Out[39]: ['aac']
我应该得到一个 media-u9xuxtkay_213.aac 而不是 aac。同样的方式,接受的答案应该从我的 iPhone 返回 Sent 而不是 iPhone
【问题讨论】:
-
使用
r"media.+\.(?:aac|ts)",非捕获组。 -
那么在另一个问题中接受的答案是错误的?
-
不,如果你将它与
re.finditer一起使用并抓住.group()。但是还有一个更方便的东西——非捕获组。 -
可能会重复,但在查找此问题时,无法通过具有该标题的搜索引擎找到您链接的问题。
-
我用“re.findall wierd behavior”找到了它——最佳结果。它正在成为一个非常频繁、重复的问题。顺便说一句,您使用了哪些搜索词?