我正在使用正则表达式使用 python 解析文件的内容。我使用
re.sub
在解析之前删除注释,方法是删除以 #
开头的任何行中的任何文本。
import re
filetext = """
# This is the contents of a file
var: 800 # A var I defined
# This is a comment
# Indented comment
# Use "=" to set parameters explicitly
param1 = 123
param2 = 456
# Block of code
block1: {
# var_name = val
var1 = 7
var2 = 9
}
# Block of code 2
block2: {
# var_name = val
var1 = 7
var2 = 9
}
"""
scrubbed_text = re.sub(r'#.*', '', filetext, re.M)
print(scrubbed_text)
输出:
var: 800
param1 = 123
param2 = 456
block1: {
var1 = 7
var2 = 9
}
block2: {
# var_name = val
var1 = 7
var2 = 9
}
它会删除文本中的每一条注释,除了末尾“block2”内的注释。如果我从
re.M
调用中删除 re.sub
,它将删除所有评论,这正是我想要的。
这种行为让我感到困惑。为什么
re.M
多行模式会导致跳过一场匹配?
因为您将
re.M
放入 count=
参数。如果您执行 print(int(re.M))
,您将看到 8 - 因此 re.sub
将仅替换前 8 个出现的位置。
试试这个:
scrubbed_text = re.sub(r'#.*', '', filetext, flags=re.M)