当以#和任意数量的空格开头时,需要排除使用正则表达式定位的块。这是一个示例文件
&START A=23 ... more data ...
B=24 &END
# &START A=34 ... more data ...
B=24 &END
&START .... block 3 of data across multiple lines .... &END
&START .... block 4 of data across multiple lines .... &END
以下正则表达式不会像我预期的那样排除注释条目 -
(?!#\s*)&START(.+?)&END
希望遍历条目和文件以进行处理。用于执行此操作的Python代码(除了通过注释行之外,它的效果很好) -
f=open(filename)
data=f.read()
f.close()
pattern=re.compiler(r'(?!#\s*)&START(.+?)&END, re.DOTALL)
get_entries = pattern.findall
for entry in get_entries(data):
# process the entry
print entry
在正则表达式方面,我可能是一个基本的疏忽,因为我是绿色的。非常感谢能够提出建议的任何人。
答案 0 :(得分:5)
完全删除该行。
if line.lstrip().startswith('#'):
continue
答案 1 :(得分:2)
这似乎有效:
import re
target="""
&START A=23 ... more data ...
B=24 &END
# &START A=C34 ... more data ...
B=C24 &END
&START .... block 3 of data across multiple lines .... &END
&START .... block 4 of data across multiple lines .... &END
"""
regex = re.compile("^(?!#)&START (.*?)&END",re.MULTILINE|re.DOTALL)
for s in regex.findall(target):
print s
返回:
A=23 ... more data ...
B=24
.... block 3 of data across multiple lines ....
.... block 4 of data across multiple lines ....
答案 2 :(得分:0)
这最好用于发电机。 使用(m)多行标记将允许它搜索下一行,直到找到结束标记。