2013-12-06 5 views
0

Я следующие совпавшие строки:Заменить часть совпавшей строки в Python

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

Я хочу, чтобы заменить только часть (до подчеркивания) из соответствующих строк, а остальное его должны оставаться то же самое в каждой исходной строке.

Результат должен выглядеть следующим образом:

TROGA_TONTA 
TROGA_SONTA 
TROGA_JONTA 
TROGA_BONTA 
+0

Что такое строка? И почему у вас есть цитаты посреди них? – Hyperboreus

+0

Соответствие означает, что мое регулярное выражение выбрало их из текста. Цитаты являются буквальными символами в строке. – Coddy

ответ

0

Edit:

Это должно работать:

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 в целом. Я этого не делал, потому что вам, похоже, нужно решение Regex.

+0

Дело в том, что я должен сначала найти эти строки в тексте, а затем заменить их на новую строку, оставив части (после подчеркивания) их неизменными. Следовательно, это должно выполняться с помощью механизма регулярных выражений, который сначала находит их, а затем заменяет их. – Coddy

+0

Я должен сначала найти их в текстовом файле, а затем заменить их. Я не собираюсь извлекать их из текса. Они останутся в текстовом файле после замены их частей. – Coddy

+0

@Coddy - О, вы должны были упомянуть об этом в своем вопросе. См. Мое редактирование. Это то, что вы хотите? – iCodez

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

где MyString является строка с этими четырьмя линиями. Он вернет строку с замененными значениями.

+0

Я должен сначала найти их в текстовом файле, а затем заменить его. Я не собираюсь извлекать их из текса. Они останутся в текстовом файле после замены их частей. – Coddy

+0

Да, вы сделаете. Строки неизменяемы, метод replace() возвращает новую строку с замененными частями без изменения вашего файла или исходной строки. –

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('_'):]) 
Смежные вопросы