Python string.replace регулярное выражение

У меня есть файл параметров в форме:

parameter-name parameter-value

Где параметры могут быть в любом порядке, но есть только один параметр на строку. Я хочу заменить один параметр parameter-value новым значением.

Я использую функцию замены строки, опубликованную ранее, чтобы заменить строку, которая использует Python string.replace(pattern, sub). Регулярное выражение, которое я использую, работает, например, в vim, но не работает в string.replace().

Вот регулярное выражение, которое я использую:

line.replace("^.*interfaceOpDataFile.*$/i", "interfaceOpDataFile %s" % (fileIn))

Где "interfaceOpDataFile" - это имя параметра, который я заменяю (/i для регистронезависимого), а новое значение параметра - это содержимое переменной fileIn.

Есть ли способ заставить Python распознавать это регулярное выражение или есть другой способ выполнить эту задачу?

Ответ 1

str.replace() v2 |v3 не распознает регулярные выражения.

Чтобы выполнить подстановку с использованием регулярного выражения, используйте re.sub() v2 |v3.

Например:

import re

line = re.sub(
           r"(?i)^.*interfaceOpDataFile.*$", 
           "interfaceOpDataFile %s" % fileIn, 
           line
       )

В цикле было бы лучше сначала скомпилировать регулярное выражение:

import re

regex = re.compile(r"^.*interfaceOpDataFile.*$", re.IGNORECASE)
for line in some_file:
    line = regex.sub("interfaceOpDataFile %s" % fileIn, line)
    # do something with the updated line

Ответ 2

Вы ищете функцию re.sub.

import re
s = "Example String"
replaced = re.sub('[ES]', 'a', s)
print replaced 

будет печатать axample atring

Ответ 3

Как резюме

import sys
import re

f = sys.argv[1]
find = sys.argv[2]
replace = sys.argv[3]
with open (f, "r") as myfile:
     s=myfile.read()
ret = re.sub(find,replace, s)   # <<< This is where the magic happens
print ret

Ответ 4

re.sub определенно то, что вы ищете. И поэтому вы знаете, вам не нужны якоря и подстановочные знаки.

re.sub(r"(?i)interfaceOpDataFile", "interfaceOpDataFile %s" % filein, line)

сделает то же самое - сопоставление первой подстроки, которая выглядит как "interfaceOpDataFile" и заменяет ее.