带正则表达式的Python条件

带正则表达式的Python条件,python,regex,Python,Regex,我有一个包含这些数据的文件: 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_

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

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\u BEGIN\u 0009996
PAS\u BEGIN\u 0009996

以下是示例的链接:

它找到了一些东西,但我的python代码没有找到任何东西

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

有人能帮我吗?谢谢

您正在逐行阅读文本文件,但您的预期匹配项位于多行。您需要将整个文件读入一个变量,然后使用
re.DOTALL
选项运行类似于您的正则表达式,或者更好地运行类似于
a.*b
的模式,以便
可以匹配换行符

所以,你可以用

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
如果需要查找多个匹配项,请将
重新搜索
部分(内容之后的所有行)替换为


请参见

重新匹配
仅在字符串开头搜索。使用
重新搜索
。另外,将
[\S\S]*
更改为
[\S\S]*?
我认为我的问题不仅仅是搜索或匹配。通过更改为搜索,它不会更改结果。是的,一个常见的问题是:您正在逐行阅读。使用带有open(filepath,“r”)的
作为f:contents=f.read()
。在
内容中搜索
。如果重新搜索(“PAS\u BEGIN\u 0009999[\S\S]*PAS\u END\u 0009999”,contents):data.append(contents)
但它添加了我的所有文件,看起来它不理解我的regexNo,
m=re.Search(…)
,然后
如果m:
,那么
data.append(m.group())
。或者使用
data=re.findall(regex,contents)
谢谢,通过我的帖子,你解决了我的部分问题;)
data = re.findall(pattern, contents)