Cadena Python.reemplazar expresión regular [duplicar]
Esta pregunta ya tiene una respuesta aquí:
Tengo un archivo de parámetros de la forma
parameter-name parameter-value
Donde los parámetros pueden estar en cualquier orden pero solo hay un parámetro por línea. Quiero reemplazar el valor de parámetro de un parámetro con un nuevo valor.
Estoy usando una línea reemplazar función publicada anteriormente ( Buscar y reemplazar una línea en un archivo en Python) para reemplazar la línea que usa la cadena de python.reemplazar (patrón, subst). La expresión regular que estoy usando funciona, por ejemplo, en vim, pero no parece funcionar en string.reemplazar. Aquí está la expresión regular que estoy usando:
line.replace("^.*interfaceOpDataFile.*$/i", "interfaceOpDataFile %s" % (fileIn))
Donde interfaceOpDataFile es el nombre del parámetro que estoy reemplazando (/i para mayúsculas y minúsculas) y el nuevo valor del parámetro es el contenido del fileIn variable. ¿Hay alguna manera de hacer que python reconozca esta expresión regular o hay otra manera de lograr esta tarea? Gracias de antemano.
4 answers
str.replace()
v2|v3 no reconoce las expresiones regulares.
Para realizar una sustitución usando una expresión regular, use re.sub()
v2|v3.
Por ejemplo:
import re
line = re.sub(
r"(?i)^.*interfaceOpDataFile.*$",
"interfaceOpDataFile %s" % fileIn,
line
)
En un bucle, sería mejor compilar primero la expresión regular:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-17 00:06:09
Usted está buscando el re.sub función.
import re
s = "Example String"
replaced = re.sub('[ES]', 'a', s)
print replaced
Se imprimirá axample atring
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-22 14:13:21
Como resumen
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-06 19:10:00
re.sub
es definitivamente lo que estás buscando. Y para que lo sepas, no necesitas las anclas y los comodines.
re.sub(r"(?i)interfaceOpDataFile", "interfaceOpDataFile %s" % filein, line)
Hará lo mismo matching haciendo coincidir la primera subcadena que se parece a "interfaceOpDataFile" y reemplazándola.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-23 18:10:17