Как найти строки, которые заключены в кавычки, и заменить их встроенными?

1

Как узнать все строки, окруженное двойной кавычки " и заменить их новой строки?

Input                           Output
-----                           ------
'Hello "User", what up?'  ->  'Hello l("User"), what up?'
'Regexes are "so complex"'  ->  'Regex are l("so complex")'

как это сделать в Java?

  • 0
    @MxyL "These are "Nested" quotes" будет похоже на "These are \"Nested\" quotes" , теперь это изменит регулярное выражение?
Теги:

3 ответа

3
Лучший ответ

Ищите ("[^"\n]+"), замените на l($1):

str = str.replaceAll("(\"[^\"\n]+\")", "l($1)");

Если вы хотите разрешить обратные слэши в кавычках, например "These are \"Nested\" quotes" вы можете использовать выражение, подобное этому:

("(?:[^"\\\n]|\\.)*")

Используется в Java так:

str = str.replaceAll("(\"(?:[^\"\\\\\n]|\\\\.)*\")", "l($1)");
  • 0
    Спасибо, приятель, лучший ответ. большое спасибо.
2

Попробуй это:

String newValue=oldValue.replaceAll("\"([^\"]*?)\"", "(\"$1\")");
1

У вас в основном есть одна проблема, дважды. Вы пытаетесь поместить вещи (* и \w) в класс символов, которые не входят в эти скобки. Вы уже нашли предопределенный класс символов (\w), поэтому можете просто использовать его напрямую:

"\w*" // These would be nested quotes, and I'm omitting escapes for clarity

Это эквивалентно: "[a-zA-Z_0-9]*"


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

String bro = "Hello \"bro\", what \"up\"?";
String replaced = bro.replaceAll("(\"\\w*\")", "l($1)");

System.out.println(replaced); // prints: Hello l("bro"), what l("up")?

Если вы хотите захватить пробелы и пунктуацию в кавычках, а не только одиночные, нечитаемые слова, вы можете просто заменить \\w символьным классом, который содержит персонажи, которые вас интересуют. Подстройте его к конкретным потребностям вашей операции. Если вы не хотите вообще различать содержимое, вы можете использовать [^\"] (обратите внимание на необходимость избежать "), чтобы он соответствовал любому символу без двоичного слова:

String bro = "Hello \"bro\", \"what up\"?";
String replaced = bro.replaceAll("(\"[^\"]*\")", "l($1)");

System.out.println(replaced); // prints: Hello l("bro"), l("what up")?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню