re.sub(r'(?<=foo: ")[^"]+(?=")', 'pears', s)
La expresión coincide con una secuencia de caracteres que
- sigue la cadena de
foo: "
,
- no contiene comillas dobles y
- es seguido por
"
(?<=)
y (?=)
son lookbehind and lookahead
Esta expresión regular fallará si el valor de foo
contiene cuñas escapadas. Utilice el siguiente para su captura también:
re.sub(r'(?<=foo: ")(\\"|[^"])+(?=")', 'pears', s)
Código de ejemplo
>>> s = 'foo: "apples \\\"and\\\" more apples", bar: "oranges"'
>>> print s
foo: "apples \"and\" more apples", bar: "oranges"
>>> print re.sub(r'(?<=foo: ")(\\"|[^"])+(?=")', 'pears', s)
foo: "pears", bar: "oranges"
Su patrón utiliza el operador codicioso '*', lo que significa que obtendrá el partido más largo que pueda encontrar, lo que significa que en. su caso, el grupo será "manzanas", barra: "naranjas". Está buscando '(. *?)' – abyx