대체 할 행 문자열이 여러 개 있지만 작동하지 않는 이유를 이해할 수 없습니다. 어떤 이유로 문자열의 마침표가 정규 표현식의 일치를 중지합니다.파이썬에서 마침표가 여러 줄의 정규 표현식을 대체합니까?
내 문자열 :
s = """
[some_previous_text]
<start>
one_period .
<end>
[some_text_after]
"""
것은 내가 끝낼 싶습니다 무엇 :
s = """
[some_previous_text]
foo
[some_text_after]
"""
내가 처음 시도 무엇, 그러나 아무것도 일치하지 않습니다
>>> import re
>>> s = "<start>\none_period .\n<end>"
>>> print re.sub("<start>[^.]*<end>", "foo", s)
<start>
one_period .
<end>
을
그러나 기간을 연장했을 때 제대로 작동했습니다.
>>> import re
>>> s = "<start>\n<end>\none_period .\n<end>"
>>> print re.sub("<start>[^.]*<end>", "foo", s)
foo
one_period .
<end>
는 그래서 여기에 무슨 : 나는 기간 전에
<end>
태그를 넣을 때
>>> import re
>>> s = "<start>\nno_period\n<end>"
>>> print re.sub("<start>[^.]*<end>", "foo", s)
foo
또한, 그것은 처음 <end>
태그를 일치? 왜 기간은 [^.]*
과 일치합니까?
는 편집 :
내가 실수 캐럿 ^
새로운 라인 매칭이라고 생각
를 해결했다. 내가 원했던 것은 re.DOTALL 플래그였습니다 (앰버로 표시됨). 여기에 내가 지금 사용하고 표현이다 :
>>> import re
>>> s = "<start>\none_period .\n<end>"
>>> print re.sub("<start>.*<end>", "foo", s, flags=re.DOTALL)
foo
'. *'을 사용하는 경우에는 're.sub (". * ", "foo", s)')와 일치하지 않습니다. 올바른 대체 표현식은 무엇입니까? –
user749618
줄마다'.'를 매치 시키려면're.DOTALL' 플래그를 사용해야합니다. http://docs.python.org/library/re.html#re.DOTALL – Amber
're.sub (". * ", "foo", s, flags = re.DOTALL)'작품! 감사합니다. –
user749618