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" и заменяет ее.