研究では、なぜこれらのパターンを異なる方法で扱うのですか?

研究では、なぜこれらのパターンを異なる方法で扱うのですか?

よく使うサギテックス、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

これがなぜ私に問題を引き起こすのかを投稿できれば、明らかに役に立ちます。しかし、スクリプトが少し長く、それを使用するプロジェクトもかなり長いです。

簡単に言えば、スクリプトで使用される最初の定義は正しい結果を返し、スクリプトignoreFalse使用される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行を使用してどのパターンが無視されるかを正確に説明したくありません。)

おすすめ記事