Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式非贪婪不匹配_Python_Regex - Fatal编程技术网

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

Python正则表达式非贪婪不匹配,python,regex,Python,Regex,我有这篇课文 This is test 2019 -(dsd) g1-d2 720p test This test 2019 - g1-d2 test 它们是分开的线,所以不在一起 我试图抓住2019年和720便士之间的所有东西,如果有的话 (.+?) ([0-9]{4})(.+?)([0-9]{3,4}p)?(.*) 问题是组(+?)只匹配单个字符。我想比赛到720便士。如果使用非贪婪,那么它匹配所有内容 我想要的输出是 G1: This is test G2: 2019 G3: -(d

我有这篇课文

This is test 2019 -(dsd) g1-d2 720p test
This test 2019 - g1-d2 test
它们是分开的线,所以不在一起

我试图抓住2019年和720便士之间的所有东西,如果有的话

(.+?) ([0-9]{4})(.+?)([0-9]{3,4}p)?(.*)
问题是组(+?)只匹配单个字符。我想比赛到720便士。如果使用非贪婪,那么它匹配所有内容

我想要的输出是

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

你只需要摆弄一下你的后顾之忧和前顾之忧

(?<=2019)(.+?)(?=720p)

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

编辑

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

像这样:

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

我们可以尝试在以下模式上执行正则表达式拆分:

 (?=\d{4})|(?<=\d{4}) | (?=\d{3,4}p)|(?<=\d{3}p) |(?<=\d{4}p) 

这里的想法是使用lookarounds进行拆分,lookarounds断言,但实际上不消耗输入中的任何内容。每当我们向前看或向后看时,看到一个4位数的年份,或一个3-4位数的数字,后跟
p

2019和720p不是固定的,可以像任何年份一样变化,分辨率也可以像1080p2160p@rgd你总是可以替换其他正则表达式模式。请参见编辑。具有720p的组是可选的,因此它不会始终存在,但该部分可能存在,也可能不存在,因此它不会始终存在。确定我以为您只希望在存在720p的情况下匹配字符串。请参见编辑,现在应按预期工作。谢谢,您的解决方案非常有效,而且非常简单:)靠近我的,我想你想在720便士或绳子的末端之前抓住一切。所以不是“不确定”?使用(([0-9]{3,4}p)(.*))|$
 (?=\d{4})|(?<=\d{4}) | (?=\d{3,4}p)|(?<=\d{3}p) |(?<=\d{4}p) 
input = "This is test 2019 -(dsd) g1-d2 720p test"
parts = re.split(r' (?=\d{4})|(?<=\d{4}) | (?=\d{3,4}p)|(?<=\d{3}p) |(?<=\d{4}p) ', input)
print(parts)
['This is test', '2019', '-(dsd) g1-d2', '720p', 'test']