Избегайте 'escape-символа' между двойными кавычками в строке - PullRequest
0 голосов
/ 06 марта 2019

У меня есть код Python в формате String

"input = \"1\n2\t3\n4\"\nprint(input)"

Я хочу экранировать любые символы, которые встречаются только в двойных или одинарных кавычках.

Последняя строка должна выглядеть следующим образом

"input = \"1\\n2\\t3\n4\"\nprint(input)"

Я пытался сделать это, но не работает.

code.replaceAll("(\")[\n\t\b]*(\")", "\"\\n\"")

1 Ответ

0 голосов
/ 06 марта 2019

Вы хотите найти все символы после кавычки ("), которые не являются кавычками, вплоть до следующей кавычки.

Regex, чтобы найти все тексты между двумя кавычками:

"[^"]*"

||   ||
||   |and terminated with a "
||   MANY repeatations of that (written as *)
|characters that are NOT " (written as [^"])
Start with "

Но теперь вы не хотите, чтобы ОДНА находка для такой строки между "и" - вы хотите, чтобы каждый символ был уникальной находкой.

На данный момент стандартное регулярное выражение не может сделать работу за вас: Вы можете получить только первый символ такой находки с помощью "([^"])[^"]*", но тогда ваш следующий вопрос - как получить 2-й, 3-й и т. Д. Вы можете подумать о добавлении идентификаторов переменной длины до и после совпадения ... но даже с регулярным выражением, таким как "[^"]*([^"])[^"]*", вы всегда получите ОДНО совпадение для нахождения между обоими "". Regex не поддерживает концепцию циклического анализа результатов; подстановочные знаки всегда оцениваются как max-match.

Так что вам нужно что-то другое. Я бы порекомендовал искать первую позицию "" внутри вашей строки, например, с помощью String.indexOf (...), а затем перебирать строку до тех пор, пока не найдете следующую (завершающую) кавычку. Для всех символов между ними вы можете заменить его. Поэтому вы будете работать с отдельной переменной вывода данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...