如何在正则表达式搜索时排除注释行?
需要排除那些在#符号后面,并且前面有任意数量空格的内容块。下面是一个示例文件:
&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
这可能是我在正则表达式方面的一个基本疏忽,因为我对此还不太熟悉。非常感谢任何能给出建议的人。
3 个回答
0
这最好用生成器来处理。使用(m)多行标签可以让它继续搜索下一行,直到找到你设定的结束标签。
6
完全跳过这一行。
if line.lstrip().startswith('#'):
continue
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 ....