플래그가 있는 Python re.sub는 모든 항목을 대체하지 않습니다.
-
09-06-2019 - |
문제
Python 문서에서는 다음과 같이 말합니다.
re.다중 라인:지정되면 패턴 문자 '^'는 문자열의 시작 부분과 각 줄의 시작 부분(각 개행 바로 다음)에서 일치합니다.기본적으로 '^'는 문자열의 시작 부분에서만 일치합니다.
그렇다면 다음과 같은 예상치 못한 결과가 나오면 어떻게 될까요?
>>> import re
>>> s = """// The quick brown fox.
... // Jumped over the lazy dog."""
>>> re.sub('^//', '', s, re.MULTILINE)
' The quick brown fox.\n// Jumped over the lazy dog.'
해결책
의 정의를 보세요 re.sub
:
sub(pattern, repl, string[, count])
네 번째 인수는 사용 중인 개수입니다. re.MULTILINE
(8)을 플래그가 아닌 개수로 사용합니다.
플래그를 사용하려면 정규식을 컴파일해야 합니다.
re.sub(re.compile('^//', re.MULTILINE), '', s)
ㅏ flags
Python 2.7에 인수가 추가되었으므로 이제 전체 정의는 다음과 같습니다.
re.sub(pattern, repl, string[, count, flags])
의미하는 것은:
re.sub('^//', '', s, flags=re.MULTILINE)
공장.
다른 팁
re.sub('(?m)^//', '', s)
전체 정의 re.sub
이다:
re.sub(pattern, repl, string[, count, flags])
즉, Python에 매개변수가 무엇인지 알려주면 다음을 전달할 수 있습니다. flags
통과하지 않고 count
:
re.sub('^//', '', s, flags=re.MULTILINE)
또는 더 간결하게 말하면:
re.sub('^//', '', s, flags=re.M)
제휴하지 않습니다 StackOverflow