よく使うサギテックス、Pythonで書かれています。
パッケージのスクリプトの1つは、次の変数を定義します。
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
私の質問は:で変数を使用したい場合、これら2つの定義の間に違いはありますかre.search
?
これがなぜ私に問題を引き起こすのかを投稿できれば、明らかに役に立ちます。しかし、スクリプトが少し長く、それを使用するプロジェクトもかなり長いです。
簡単に言えば、スクリプトで使用される最初の定義は正しい結果を返し、スクリプトignore
でFalse
使用される2番目の定義は常に返されますignore
。
ignore
これら2つの定義が異なる動作につながる明確な理由があることを願っています。
答え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行を使用してどのパターンが無視されるかを正確に説明したくありません。)