我有这段文字
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))?(.*)
关于Python正则表达式非贪婪不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56573635/