目标:找到第二种模式,只有在第一次看到模式出现在不同的模式后才认为是匹配。
背景
我正在使用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:
的第一个实例?或者,在我的示例中,是否有更健壮的方法来查找方括号之间的位。
谢谢,
迈克尔
答案 0 :(得分:3)
我建议使用
r'Sample comments:\s*\[(.*?)\s*]'
请参阅regex和IDEONE 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)
?