Python re.sub (): пытается заменить только экранированные символы - PullRequest
1 голос
/ 30 октября 2019

В Python 3.x мне нужно заменить экранированные двойные кавычки в некотором тексте на некоторый пользовательский шаблон, оставив не экранированные двойные кавычки как есть. Поэтому я пишу в виде тривиального кода как:

text = 'These are "quotes", and these are \"escaped quotes\"'
print(re.sub(r'\"', '~', text))

И ожидаю увидеть:

These are "quotes", and these are ~escaped quotes~

Но вместо этого я получаю:

These are ~quotes~, and these are ~escaped quotes~

Итак,что является правильным шаблоном для замены только экранированных кавычек?

История этой проблемы - попытка прочитать «недопустимый» JSON-файл, содержащий в себе функцию Javascript, размещенный с переводами строк как есть, но сизбежавшие кавычек. Если есть более простой способ анализа JSON с символами новой строки в значениях ключей, я благодарен за подсказку.

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Во-первых, вам нужно использовать необработанную строку для присвоения text, чтобы обратные слэши были сохранены буквально (или вы можете избежать обратных слешей).

text = r'These are "quotes", and these are \"escaped quotes\"'

Во-вторых, вам нужно экранироватьобратный слеш в регулярном выражении, так что он будет обрабатываться буквально с помощью регулярного выражения.

print(re.sub(r'\\"', '~', text))
0 голосов
/ 30 октября 2019

Использование необработанного текста может помочь.

import re

text = r'These are "quotes", and these are \"escaped quotes\"'
print(re.sub(r'\\"', '~', text))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...