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

问题描述 投票:4回答:2

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

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

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

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

只有A和D匹配?

python regex
2个回答
3
投票

试试这个正则表达式:

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

Click for Demo

说明:

  • (?:(?<=^)|(?<=\n)) - 找到前面有\n或字符串开头的位置
  • \s* - 匹配0+出现的空格
  • Parameter.* - 匹配Parameter,然后出现任意字符的0+(换行符除外)

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

© www.soinside.com 2019 - 2024. All rights reserved.