如何在正则表达式搜索时排除注释行?

0 投票
3 回答
2954 浏览
提问于 2025-04-16 07:27

需要排除那些在#符号后面,并且前面有任意数量空格的内容块。下面是一个示例文件:

&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 ....  

撰写回答