Python正则表达式非贪婪不匹配

标签 python regex

我有这段文字

This is test 2019 -(dsd) g1-d2 720p test
This test 2019 - g1-d2 test

它们是单独的行,因此不在一起

我正在 try catch 2019 年至 720p 之间的所有内容(如果存在)

(.+?) ([0-9]{4})(.+?)([0-9]{3,4}p)?(.*)

问题是组 (.+?) 仅匹配单个字符。我希望它能匹配到 720p 。如果使用非贪婪那么它匹配所有内容

我想要的输出是

G1: This is test
G2: 2019
G3:  -(dsd) g1-d2 
G4: 720p
G5:  test

最佳答案

您需要删除 ([0-9]{3,4}p) 之后的 ? 量词,因为它会使前一组成为可选的,并且不会强制引擎匹配它。

编辑

要匹配包含或不包含 720p 的字符串,您可以将 (.+?)([0-9]{3,4}p) 括起来 到可选的非捕获组 (?:)?
就像这样:

(.+?)([0-9]{4})(?:(.+?)([0-9]{3,4}p))?(.*)

Demo

关于Python正则表达式非贪婪不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56573635/

相关文章:

python - 正则表达式可以正常工作,但在放入 XML 模式时会失败

java - ^A 的正则表达式模式

python - 在Python中使用正则表达式搜索CSV文件中的特定短语

python - ModuleNotFoundError:没有名为 '...' 的模块

python - 绘制 matplotlib 错误栏给出 AssertionError 断言 vertices.ndim == 2

python - 电话号码正则表达式所有格式

sql - 行值到列以及列名称到值 bigquery

python - 如何将表单数据传递到多个sqlite3行

python - 具有Python脚本,conda和集群的SnakeMake规则

python - 关于在动画期间更改分散标记的问题