繁体   English   中英

如何将管道(正则表达式OR)应用于模式的特定子字符串,以便它匹配组,然后是一组字符或EOL?

[英]How to apply pipe (regex OR) to a specific substring of pattern so that it matches groups followed by EITHER a set of characters OR EOL?

我有一系列的问题和答案,我想在问题上分开。

s = 'Q1 blah1 Ans BLAH1 Q2 blah2 Ans BLAH2'
re.split('(Q\d.*?)Q\d', s)

结果:

['', 'Q1 blah1 Ans BLAH1 ', ' blah2 Ans BLAH2']

我想捕获以'Q#'开头的部分,然后是另一个'Q#'或该行的结尾。 所以我尝试使用这个:

re.split('(Q\d.*?)Q\d|$', s)
['', 'Q1 blah1 Ans BLAH1 ', ' blah2 Ans BLAH2']

还有这个:

re.split('(Q\d.*?)(Q\d|$)', s)
['', 'Q1 blah1 Ans BLAH1 ', 'Q2', ' blah2 Ans BLAH2']

但是,他们没有给我预期的结果。 由于|使用不当,它在第一种情况下不起作用 ,但我不知道如何纠正它。 在第二种情况下, Q2不会与blah2 Ans BLAH2一起被捕获。

编辑:

期望的输出:

['', 'Q1 blah1 Ans BLAH1 ', 'Q2 blah2 Ans BLAH2']

尝试拆分以下模式:

\s+(?=Q\d+)

这使用了一个积极的先行断言,断言但不消耗,下一个问题就是开始。

s = 'Q1 blah1 Ans BLAH1 Q2 blah2 Ans BLAH2'
print re.split('\s+(?=Q\d+)', s)

['Q1 blah1 Ans BLAH1', 'Q2 blah2 Ans BLAH2']

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM