Regular-Expression
為什麼 re.search 會以不同的方式處理這些模式?
我經常使用sagetex,它是用 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
導致不同的行為有一個明顯的原因。
更新的正則表達式缺少先前正則表達式所具有的空間。
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 行左右的行來準確解釋被忽略的模式。)