我正在使用RegexBuddy实用程序和正则表达式
^\s*for\s.*:(?!:).*$
我将其解释为'搜索具有可选前导空格的行,文本' for',单个空格,然后该行的其余部分包含冒号,但不包含两个冒号在一起'。
这主要起作用,但两个冒号排除不是(它们通常是迭代器引用)。
此搜索的正确正则表达是什么?
答案 0 :(得分:1)
for
语句不必以空格开头,for
和左大括号之间也不需要空格。但好的,这是我的尝试:
^\s*for\s*\([^)]*[^:]:[^:][^)]*\).*
注意:通常,使用正则表达式准确解析C ++代码几乎是不可能的。您需要一个有状态解析器来过滤嵌套注释等。
答案 1 :(得分:0)
我会使用这个正则表达式(它适用于grep
,不确定RegexBuddy):
^\s*for\s*(.\+[^:]:[^:].\+).*$
基本部分在[^:]:[^:]
中,它只匹配一对括号内的任意文本中的单个冒号(不是紧接在另一个冒号之前或之后)。
编辑 RustyX's comment建议不能使用仅匹配 范围的正则表达式,因为它总是被条件的冒号欺骗(?:) operator。