본문 바로가기

개발하자

여러 줄 문자열 내에서 파이썬 대체

반응형

여러 줄 문자열 내에서 파이썬 대체

내 모듈 중 하나(t_mesg.py)에는 다음과 같은 다중 줄 문자열이 있습니다:

tm = """
this
is currently
a
test
message
"""

문자열의 특정 부분을 다른 부분으로 교체해야 하는 다른 모듈로 이를 가져옵니다. 그러나 수입품에서는 새 라인 차도 들어오고 그래서 작동하지 않을 것이다.

>>> from t_mesg import tm
>>> tm
'\nthis\nis \na\ntest\nmessage\n'

이 가져온 문자열을 처리하여 "is"를 "is"로 변경해야 하는 경우 문자열이 이렇게 보이도록 어떻게 처리해야 합니까?

tm = """
this
is not currently
a
test
message
"""

TL;DR - 새 줄 문자를 무시하고 교체를 수행하려면 어떻게 해야 합니까?




기본적으로 문자열에서 단어 바꾸기를 수행하려고 합니다. 정규 표현식과 단어 경계를 사용하여 할 수 있으며, 새 줄을 사용하든 사용하지 않든 간에:

import re
s = "this\n is \n a good \n question"
s = re.sub(r"\bis\b","is not",s)
print(s)

결과:

this
 is not 
 a good 
 question

(두 단어 사이에 더 많은 새 줄이 있을 수 있고 이 줄이 보존될 수 있음)을 사용하여 되돌릴 수 있습니다

s = re.sub(r"\bis\b(\s+)\bnot\b",r"is\1",s)
print(s)

인쇄:

this
 is 
 a good 
 question

좀 더 나아가, 구두점과 다른 비알파적인 것들을 소개할 수도 있고, 당신이 사용하는 것은 여전히 다음을 관리할 수 있다:

s = "this\n is - not - \n a good \n question"
s = re.sub(r"\bis(\W+)not\b",r"is\1",s)
print(s)

인쇄물("아니오"는 없어졌지만 앞의 대시는 없어지지 않음):

this
 is -  - 
 a good 
 question



문자열을 분할해서 단어를 교체하고 배열을 다시 결합하는 시도를 해볼 수 있습니다.

tm_array = tm.split("\n")
tm_array[1] = "is not"
new_tm = '\n'.join(tm_array)



교체 방법은 변경된 값을 동일한 변수에 저장하지 않습니다. 다른 변수에 저장하고 인쇄해야 합니다.

tm = tm.replace('\nis \n', '\nis not\n')

반응형