python - 正则表达式向后匹配任何内容,直到第一次出现字符串
问题描述
我正在解析类似以下格式的日志文件以提取一些信息,因此我需要将 TO_BE_MATCHED 日志与之前的所有日志进行匹配,直到 Tick2,但不幸的是,尽管我将 (?) 设为非贪婪,但它仍扩展到第 1 行。
这里有什么建议吗?
import re
if __name__ == "__main__":
text_str ='''0000 :TRACE|####### Tick1 ####### | file1.c:604
0001 :TRACE|log1 | file2.c:400
0002 :TRACE|log2 | file3.c:611
0003 :TRACE|####### Tick2 ####### | file1.c:604
0004 :TRACE|log3 | file2.c:498
0005 :TRACE|log4 | file3.c:676
0006 :TRACE|TO_BE_MATCHED | file4.c:555
0007 :TRACE|log5 | file5.c:676
0008 :TRACE|####### Tick3 ####### | file1.c:604"'''
regex = r"(Tick(\d+)(.*?)TO_BE_MATCHED)"
match = re.findall(regex,str(text_str), re.DOTALL)
if(match):
print match[0][0]
================================================
输出:
Tick1 ####### | file1.c:604
0001 :TRACE|log1 | file2.c:400
0002 :TRACE|log2 | file3.c:611
0003 :TRACE|####### Tick2 ####### | file1.c:604
0004 :TRACE|log3 | file2.c:498
0005 :TRACE|log4 | file3.c:676
0006 :TRACE|TO_BE_MATCHED
解决方案
regex = r"(Tick2(.*?)TO_BE_MATCHED)"
如果您尝试匹配TO_BE_MATCHED
string 和 TickN 之间的所有内容,其中 N 是大于 2 的任何数字;然后
regex = "r(Tick[2-9]{1,}(.*)TO_BE_MATCHED)"
推荐阅读
- html - 根据路线Angular更改页脚背景颜色
- c - C中堆栈上的参数和变量的顺序
- vue.js - 刷新网页后重置商店
- python - 当系数未知(但仍然是实数)时,如何在 Python 中求解线性方程组
- python - Python Pandas read_sql 舍入和转换数字
- kotlin - 部署不是 Web 应用程序的应用程序?Kubernetes
- android - 下载管理器抛出 android.os.NetworkOnMainThreadException
- r - 为什么 pivot_longer() 仅在我在括号内指定数据框时才起作用,而不是使用管道符号?
- velo - Wix CMS - 商店收藏的动态标题
- sql - SQL 由一组 Row 派生值