按照不同的模式查找第一个ReGex模式

时间:2016-07-12 18:40:46

标签: python regex python-2.7 regex-lookarounds

目标:找到第二种模式,只有在第一次看到模式出现在不同的模式后才认为是匹配。

背景

我正在使用Python-2.7 Regex

我有一个特定的正则表达式匹配,我遇到了麻烦。我试图在下面的示例中的方括号之间得到文本。

  Sample comments:

    [98 g/m2 Ctrl (No IP) 95 min 340oC         ]

    [    ]

我需要这一行:

98 g/m2 Ctrl (No IP) 95 min 340oC

问题是搜索模式Sample comments:之间的空格,制表符和换行符的数量不确定,而我想要的匹配给我带来了麻烦。

最佳尝试:

我能够轻松匹配第一部分,

match = re.findall(r'Sample comments:[.+\n+]+', string)

但是我无法获得我希望抓住方括号之间部分的长度匹配,

match = re.findall(r'Sample comments:[.+\n+]+\[(.+)\]', string)

我的想法:

有没有办法在匹配模式\[(.+)\]后使用ReGex查找模式Sample comments:的第一个实例?或者,在我的示例中,是否有更健壮的方法来查找方括号之间的位。

谢谢,

迈克尔

2 个答案:

答案 0 :(得分:3)

我建议使用

r'Sample comments:\s*\[(.*?)\s*]'

请参阅regexIDEONE demo

要点是\s*匹配零个或多个空格,包括垂直(换行符)和水平。见Python re reference

  

\s
  如果未指定UNICODE标志,则它与任何空白字符匹配,这相当于集[ \t\n\r\f\v]LOCALE标志对空间的匹配没有额外的影响。如果设置了UNICODE,则这将匹配字符[ \t\n\r\f\v]以及Unicode字符属性数据库中分类为空格的任何内容。

模式详情

  • Sample comments: - 一系列文字字符
  • \s* - 0个或更多空格
  • \[ - 文字[
  • (.*?) - 第1组(由re.findall返回)捕获0 +任何字符,但新行尽可能少,直到第一个...
  • \s* - 0+空格和
  • ] - 文字](请注意,不必在字符类之外进行转义)。

答案 1 :(得分:0)

不确定我是否正确理解了您的问题,但re.findall('Sample comments:[^\\[]*\\[([^\\]]*)\\]', string)似乎有效。

如果你想从你的线上剥去最后的空格,也许re.findall('Sample comments:[^\\[]*\\[[ \t]*([^\\]]*?)[ \t]*\\]', string)