나는 자주 사용한다사기텍스, 파이썬으로 작성되었습니다.
패키지의 스크립트 중 하나는 다음과 같은 변수를 정의합니다.
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 줄을 사용하여 어떤 패턴이 무시되는지 정확하게 설명하고 싶지 않습니다.)