Python 正则表达式 findall 或

lap*_*ira 1 python regex

我正在编译以下模式:

pattern = re.compile("media.+\.(aac|ts)")
Run Code Online (Sandbox Code Playgroud)

我的想法是获取包含在字符串中的 .ts 和 .aac 媒体文件。媒体文件名可以是 media-u9xuxtkay_213.aac 或 media-u9xuxtkay_213.ts

根据这个接受的答案Python 正则表达式 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']
Run Code Online (Sandbox Code Playgroud)

所以我打电话给 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']
Run Code Online (Sandbox Code Playgroud)

我应该得到一个 media-u9xuxtkay_213.aac 而不是 aac。接受的答案应该以同样的方式从我的 iPhone 返回 Sent 而不是 iPhone

ASG*_*SGM 5

括号充当“捕获组”,表示正则表达式应该从字符串中选择什么。您可以使用(?: )使其成为非捕获组,因此它会获取整个字符串。

re.compile(r"media.+\.(?:aac|ts)")
Run Code Online (Sandbox Code Playgroud)