我有一个包含这些数据的文件:
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_0009996
和PAS_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/