在python中替换匹配字符串的一部分

时间:2013-12-06 16:49:19

标签: python regex replace

我有以下匹配的字符串:

punctacros="Tasla"_TONTA  
punctacros="Tasla"_SONTA  
punctacros="Tasla"_JONTA  
punctacros="Tasla"_BONTA

我想只替换匹配字符串的一部分(在下划线之前),其余部分应该在每个原始字符串中保持相同。

结果应如下所示:

TROGA_TONTA  
TROGA_SONTA  
TROGA_JONTA  
TROGA_BONTA

3 个答案:

答案 0 :(得分:0)

mystring.replace('punctacross="Tasla"', 'TROGA_')

其中mystring是这四行的字符串。它将返回带有替换值的字符串。

答案 1 :(得分:0)

如果要在第一个下划线之前替换所有内容,请尝试以下操作:

#! /usr/bin/python3

data = ['punctacros="Tasla"_TONTA',
'punctacros="Tasla"_SONTA',  
'punctacros="Tasla"_JONTA',  
'punctacros="Tasla"_BONTA',
'somethingelse!="Tucku"_CONTA']

for s in data:
    print('TROGA' + s[s.find('_'):])

答案 2 :(得分:0)

修改

这应该有效:

from re import sub
with open("/path/to/file") as myfile:
    lines = []
    for line in myfile:
        line = sub('punctacros="Tasla"(_.*)', r'TROGA\1', line)
        lines.append(line)
with open("/path/to/file", "w") as myfile:
    myfile.writelines(lines)

结果:

TROGA_TONTA  
TROGA_SONTA  
TROGA_JONTA  
TROGA_BONTA

但请注意,如果您的文件与给定的示例完全相同,则可以将re.sub行替换为:

line = "TROGA_"+line.split("_", 1)[1]

完全不需要正则表达式。我没有这样做,因为你似乎想要一个Regex解决方案。