如何修改以下代码行(读取config_file
中的参数名称):
re.findall('Parameter.*', config_file)
以便忽略左边带有注释符号(%
)的行?即在以下示例中,
Parameter: A
%Parameter: B
% Parameter: C
Parameter: D %the best parameter
只有A和D匹配?
答案 0 :(得分:3)
试试这个正则表达式:
(?:(?<=^)|(?<=\n))\s*Parameter.*
<强>解释强>
(?:(?<=^)|(?<=\n))
- 找到前面有\n
或字符串开头\s*
- 匹配0次出现的空格Parameter.*
- 匹配Parameter
后跟0次出现的任何字符(换行符除外)答案 1 :(得分:1)
您可以在findall
中使用正则表达式替换和捕获组:
>>> test_str = ("Parameter: A\n"
... "%Parameter: B\n"
... " % Parameter: C\n"
... " Parameter: D %the best parameter")
>>>
>>> print filter(None, re.findall(r'%\s*Parameter|(Parameter.*)', test_str))
['Parameter: A', 'Parameter: D %the best parameter']
您想要丢弃的匹配项应在最后一次捕获组匹配之前出现。