用正则表达式中的空格忽略注释

时间:2017-12-21 15:23:38

标签: python regex

如何修改以下代码行(读取config_file中的参数名称):

re.findall('Parameter.*', config_file)

以便忽略左边带有注释符号(%)的行?即在以下示例中,

Parameter: A
%Parameter: B
  %  Parameter: C
 Parameter: D %the best parameter

只有A和D匹配?

2 个答案:

答案 0 :(得分:3)

试试这个正则表达式:

(?:(?<=^)|(?<=\n))\s*Parameter.*

Click for Demo

<强>解释

  • (?:(?<=^)|(?<=\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']

您想要丢弃的匹配项应在最后一次捕获组匹配之前出现。

RegEx Demo