python - 正则表达式 : close most match

标签 python regex

我有一个看起来像这样的文本:

data="""
XYZ
sometext1
...
XYZ
sometext2
...
TPoint
sometext3
...
XYZ
sometext4
...
TPoint
"""

我想在最接近的 XYZTPoint 之间提取 sometext2 ... 文本。

我的第一次尝试是

m = re.search("XYZ(.*?)TPoint", data, re.DOTALL)
print m.group(1)

但这给出了

sometext1
...
XYZ
sometext2
...

如何提取

sometext2
...

?

我可以做一些后处理来提取我想要的部分(比如 rfind('XYZ')),但想知道是否有一种方法可以单独使用正则表达式对其进行编码

(如果您对真实数据感兴趣:我有一个日志文件,TPoint 对应某种异常,XYZ 对应一条感兴趣的消息;所以我正在尝试将消息链接到异常。data 中的第一个 XYZ 值不会导致异常,但第二个和第三个会导致异常)

最佳答案

好吧,我的错!!
让它在这里。

XYZ([^XYZ]*?)TPoint //doesnt work

XYZ(((?!XYZ).)*?)TPoint //works


result = re.findall("XYZ(((?!XYZ).)*?)TPoint", data)

for x in result:
   print x  

输出:

"sometext2
...",  
"sometext4
..."

参见此处:http://regex101.com/r/zC8iW7/6

关于python - 正则表达式 : close most match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742847/

相关文章:

python - 如何克隆一个列表以使其在分配后不会意外更改?

python - find_all 没有在混合内容中找到文本

php - 删除与 php 匹配模式的类

python - logger.setLevel(logging.INFO) 不会使 logger.info() 可见

python - 在 curio 中等待事件的问题

python - 大型 flask 应用程序的初始化代码在哪里

c# - 创建标记语言 - 条件

c# - 如何替换到空格?

java - 使用空字符串作为分隔符拆分字符串会产生前导空字符串但不会产生尾随空字符串

python - 如何正确卸载Anaconda?