Python re.findall非贪心的结果

时间:2017-02-23 12:02:50

标签: python regex findall non-greedy

我试图仅使用以下代码获取“Text3”部分:

import re
stringtotest = "begin:Text1<wrong>Text2<wrong>Text3<right>Text4<wrong>"
right = re.findall("<wrong>(.+?)<right>",stringtotest)
>>> right
['Text2<wrong>Text3']

为什么Python也会给我Text2?如何告诉他我只想要在最近的“错误”之后的部分?谢谢。

2 个答案:

答案 0 :(得分:4)

.匹配任何内容。您可以使用否定的字符类来限制匹配:

<wrong>([^<]+?)<right>

如果你想获得没有外部标签的中间部分,可以使用lookaheads和lookbehinds来断言标签的位置:

(?<=<wrong>)([^<]+?)(?=<right>)

答案 1 :(得分:1)

<wrong>((?:(?!<wrong>).)*)<right>

你可以使用一个否定的前瞻量词。参见演示。

https://regex101.com/r/8yUhDL/1

相关问题