연구에서는 왜 이러한 패턴을 다르게 취급합니까?

연구에서는 왜 이러한 패턴을 다르게 취급합니까?

나는 자주 사용한다사기텍스, 파이썬으로 작성되었습니다.

패키지의 스크립트 중 하나는 다음과 같은 변수를 정의합니다.

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 줄을 사용하여 어떤 패턴이 무시되는지 정확하게 설명하고 싶지 않습니다.)

관련 정보