Java Regex: добавить кавычки в начало и конец строки, если отсутствует - PullRequest
0 голосов
/ 12 июня 2018

Я хочу создать простое регулярное выражение, чтобы добавить двойные кавычки " в начало или конец строки, если они не соответствуют действительности, используя метод Java string.replaceAll.

Пока что этомоя лучшая попытка:

string.replaceAll("(^[^\"])($)(?<!\")", "\"$1$2\"");

Это прекрасно работает в отдельности, но не вместе:

string.replaceAll("(^[^\"])", "\"$1");
string.replaceAll("($)(?<!\")", "$2\"");

Пример

Может кто-нибудь указатьчто я делаю не так?

Заранее спасибо,

Chopo

1 Ответ

0 голосов
/ 12 июня 2018

Когда вы используете (^[^\"])($)(?<!"), вы сопоставляете любой символ кроме " в начале строки, и вам требуется, чтобы конец строки появлялся сразу после этого символа, а затем вы выполняете дополнительную проверку, что символне " (таким образом, вид сзади в конце полностью избыточен).

Если вам нужно добавить " в начале или конец, где первый / последний символне ", вам нужно использовать чередование:

s=s.replaceAll("^(?!\")|$(?<!\")", "\"");

См. это регулярное выражение demo .

Подробности

  • ^(?!\") - соответствует началу строки, если в начале нет "
  • | - или
  • $(?<!\") - соответствует концустрока и проверьте, есть ли " в конце, потерпите неудачу, если есть ".

Если вы хотите обернуть всю строку с ", если естьнет " s вокруг строки , используйте

s=s.replaceFirst("(?s)^[^\"](?:.*[^\"])?$", "\"$0\"");

Или более простой подход без регулярных выражений с конкатенацией строк и парой startsWith и endsWith:

if (!s.endsWith("\"") && !s.startsWith("\"")) {
    System.out.println("\"" + s + "\"");
}

См. эту демонстрацию Java .Шаблон здесь означает

  • (?s)^ - включите флаг Pattern.DOTALL и укажите начало строки
  • [^\"] - любой символ кроме "
  • (?:.*[^\"])? - необязательная последовательность (что, если строка содержит только 1 символ?) Из любых символов 0+, а затем из любого символа, отличного от " ...
  • $ - в конце строки.

$0 обозначает все значение совпадения.

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