Ich habe die folgenden übereinstimmenden Zeichenfolgen:

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

Ich möchte nur einen Teil (vor dem Unterstrich) der übereinstimmenden Zeichenfolgen ersetzen, und der Rest sollte in jeder ursprünglichen Zeichenfolge gleich bleiben.

Das Ergebnis sollte so aussehen:

TROGA_TONTA  
TROGA_SONTA  
TROGA_JONTA  
TROGA_BONTA
0
Coddy 6 Dez. 2013 im 20:49

3 Antworten

Beste Antwort

Bearbeiten:

Das sollte funktionieren:

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)

Ergebnis:

TROGA_TONTA  
TROGA_SONTA  
TROGA_JONTA  
TROGA_BONTA

Beachten Sie jedoch, dass Sie die Zeile re.sub durch folgende ersetzen können, wenn Ihre Datei genau dem angegebenen Beispiel entspricht:

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

Die Notwendigkeit von Regex insgesamt zu beseitigen. Ich habe dies jedoch nicht getan, weil Sie anscheinend eine Regex-Lösung wollen.

0
6 Dez. 2013 im 17:53

Wenn Sie alles vor dem ersten Unterstrich ersetzen möchten, versuchen Sie Folgendes:

#! /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('_'):])
0
Hyperboreus 6 Dez. 2013 im 16:56
mystring.replace('punctacross="Tasla"', 'TROGA_')

Wo mystring ist string mit diesen vier Zeilen. Es wird eine Zeichenfolge mit ersetzten Werten zurückgegeben.

0
Filip Malczak 6 Dez. 2013 im 16:55