为什么研究会以不同的方式处理这些模式?

为什么研究会以不同的方式处理这些模式?

我经常使用萨格泰克斯,这是用 python 编写的。

包中的脚本之一定义了一个如下变量:

ignore = r"^( _st_.goboom|print 'SageT| ?_st_.current_tex_line)"

然后该脚本使用re.find如下:

re.search(ignore, line)

最近,为了准备切换到 python 3,该ignore变量更改为

ignore = r"^( _st_.goboom|print('SageT| ?_st_.current_tex_line))"

由于某种原因,此更改导致我的某些文档出现问题。

ignore我的问题是:如果要在 中使用变量,这两个定义之间有什么区别吗re.search

显然,如果我可以发布为什么这会给我带来问题,那将会很有用,但是脚本有点长,而且我正在使用该脚本的项目也很长。

简而言之:脚本使用 的第一个定义返回正确的结果ignore,并且脚本始终False使用 的第二个定义返回ignore

我希望有一个明显的原因导致这两种定义导致ignore不同的行为。

答案1

更新后的正则表达式缺少先前正则表达式所具有的空间。

ignore = r"^( _st_.goboom|print 'SageT| ?_st_.current_tex_line)"
ignore = r"^( _st_.goboom|print('SageT| ?_st_.current_tex_line))"

我认为想要的只是

ignore = r"^( _st_.goboom|print ('SageT| ?_st_.current_tex_line))"

就解释而言......通常,正则表达式中的空格是文字字符。

现在,我承认,这可能是变化本身。你从说你要忽略

" _st_.goboom"
"print 'SageT"
"_st.current_tex_line"
" _st.current_tex_line"

忽略

" _st_.goboom"
"print 'SageT"
"print '_st.current_tex_line"
"print ' _st.current_tex_line"

(注意:正则表达式中的所有“.”字符也匹配任何字符,但我不想有 258 * 6 行左右的行来准确解释哪些模式被忽略。)

相关内容