多行字符串中的Python替换

时间:2018-09-20 14:31:33

标签: python string

我的一个模块(t_mesg.py)具有多行字符串:

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

我将其导入另一个模块,在该模块中,我需要将字符串的某些部分替换为其他部分。但是,在导入时,换行符也进入了,因此tm.replace(...)不起作用。

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

如果我需要处理此导入的字符串以将“是”更改为“不是”,我将如何处理,以便使字符串看起来像这样?

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

TL; DR-如何忽略换行符而执行替换?

3 个答案:

答案 0 :(得分:6)

基本上,您想在字符串中执行单词替换。您可以使用正则表达式和单词边界,是否可以使用换行符来做到这一点:

重新导入

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

进一步讲,您可以引入标点符号和其他非alpha内容,并使用\W仍可以管理:

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

打印(“ not”消失了,但前面没有破折号):

this
 is -  - 
 a good 
 question

答案 1 :(得分:1)

replace方法不会将更改后的值存储在同一变量中。您需要将其存储在另一个变量中并打印。

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

答案 2 :(得分:0)

您可以尝试拆分字符串,替换单词并将数组重新组合在一起。

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