IT박스

플래그가있는 Python re.sub가 모든 발생을 대체하지는 않습니다.

itboxs 2020. 12. 29. 06:50
반응형

플래그가있는 Python re.sub가 모든 발생을 대체하지는 않습니다.


Python 문서는 다음과 같이 말합니다.

re.MULTILINE : 지정된 경우 패턴 문자 '^'는 문자열의 시작 부분과 각 줄의 시작 부분에서 일치합니다 (각 줄 바꿈 바로 뒤) ... 기본적으로 '^'는 문자열의 시작 부분에서만 일치합니다. ...

그래서 다음과 같은 예상치 못한 결과가 나오면 어떻게됩니까?

>>> 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:

re.sub(pattern, repl, string[, count, flags])

네 번째 인수는 개수이며, re.MULTILINE플래그가 아니라 개수로 사용하고 있습니다 (8).

명명 된 인수를 사용하십시오.

re.sub('^//', '', s, flags=re.MULTILINE)

또는 먼저 정규식을 컴파일하십시오.

re.sub(re.compile('^//', re.MULTILINE), '', s)

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)

참조 URL : https://stackoverflow.com/questions/42581/python-re-sub-with-a-flag-does-not-replace-all-occurrences

반응형