我有一个包含这些数据的文件:

PAS_BEGIN_0009999
    T71_MANUFACTURER_4=98
    T71_COLOR_ID_7=000
    T71_OS_7=08
PAS_END_0009999

PAS_BEGIN_0009996
    T72_VAS_SERVICE_IDENTIFIER_6=
    T72_ORDER_NB_7=0003
    T72_TECHNOLOGY_7=01
PAS_END_0009996

TPV_BEGIN
    PAS_20819001=3600000
TPV_END


如何简单地隔离PAS_BEGIN_0009996PAS_BEGIN_0009996之间的内容

这是示例的链接:https://regexr.com/3vmeq

它找到了东西,但是我的python代码什么也没找到。

if re.match("PAS_BEGIN_0009999([\S\s]*)PAS_END_0009999", line):
    data.append(line)
    print(line)


谁可以帮我这个事 ?谢谢

最佳答案

您正在逐行读取文本文件,但是预期的匹配项位于多行中。您需要将整个文件读入一个变量,然后运行像您这样的正则表达式,或者更好地运行带有a.*?b选项的re.DOTALL这样的模式,以便.可以匹配换行符。

因此,您可以使用类似

import re
fpath = 'your_file_path.txt'
data = ''
pattern=r'PAS_BEGIN_0009999(.*?)PAS_END_0009999'
with open(filepath, "r") as f:
    contents = f.read()
    m = re.search(pattern, contents)
    if m:
        data = m.group(1) # or `.group() if you need to include PAS_BEGIN_0009999 and PAS_END_0009999


如果需要查找多个匹配项,请将re.search部分(contents之后的所有行)替换为

data = re.findall(pattern, contents)


请参见regex demo

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

10-15 00:30
查看更多