(?=^\s*)print_debug
正向前瞻与\s*
空格不匹配?完整的正则表达式模式为(?=^\s*)print_debug
。样本匹配是:
print_debug('scroll set: '+str(position));
print_debug('scroll set: '+str(position));
print_debug('scroll set: '+str(position));
print_debug('supposed current scroll: '+str(view.viewport_position())); # THIS LIES
else:
print_debug('SKIPPED...')
然而,它只匹配前两行:
以下是在线正则表达式引擎的链接:
\s*
与^
一起使用时会被忽略?^
,则\s*
开始匹配。^
,则\s*
停止工作。我希望它在Sublime Text
上使用,并禁用Sublime Text包的Python
源代码文件中的所有调试语句。
答案 0 :(得分:1)
(?=^\s*)
是正向前瞻,它匹配行的开头(在SublimeText中,^
默认匹配行开头),然后是0+空格(即\s*
根本不需要匹配任何文本!)。
因此,如果(?=^\s*)print_debug
模式位于字符串的开头,则print_debug
模式与(?!^)
匹配(请注意,(?<!^)
与^
的工作方式与\K
的工作方式相同是零宽度断言)。
由于SublimeText正则表达式中没有可变宽度 lookbehind 支持,您可以利用 ^\s*\Kprint_debug
匹配重置运算符:
^
请参阅regex demo
<强>详情:
\s*
- 开始行\h*
- 零个或多个空格(可以替换为\K
以仅匹配水平空格)print_debug
- 省略到目前为止匹配的全文答案 1 :(得分:-1)
我认为这实际上是你的积极前瞻,而不是if __FILE__ == $PROGRAM_NAME
lines = []
$stdin.each { |line| lines << line}
foods = make_database(lines).new
puts foods
end
。我认为你真正想要的是一个原子组(http://www.regular-expressions.info/atomic.html):
^
这显示了我在每一行的匹配(我甚至在Sublime中测试过它)。
答案 2 :(得分:-1)
(?=^\s*)print_debug
表示在匹配位置不仅print_debug
必须匹配,还^\s*
。
匹配位置是“print_debug”的开头和带有可选空格的行的开头。所以只有一行开头的“print_debug”匹配。
如果您只想确保print_debug
,只需使用空格,您应该使用后视:(?<=^\s*)print_debug