Есть ли другой способ сделать регулярное выражение без строки, экранирующей все символы? - PullRequest
2 голосов
/ 17 августа 2011

У меня есть эта строка кода, чтобы удалить пунктуацию:

str.replaceAll("[\\-\\!\\?\\.\\,\\;\\:\\\"\\']", "");

Я не знаю, нужно ли экранировать все символы в этом регулярном выражении, но я спасся только для безопасности.

Есть ли способ сделать регулярное выражение более понятным?

Ответы [ 2 ]

4 голосов
/ 17 августа 2011

Внутри [ ... ] вам не нужно экранировать персонажей.Например, [.] в любом случае не имеет смысла!

Исключениями из этого правила являются

  • ], поскольку оно преждевременно закроет все выражение [...].
  • ^ если это первый символ, поскольку [^abc] соответствует всему , за исключением abc.
  • -, если это не первый / последний символ, поскольку [a-z] соответствует всем символам от a до z.

Таким образом, вы можете написать

str.replaceAll("[-!?.,;:\"']", "")

Чтобы заключить строку в регулярное выражение, вы также можете использоватьPattern.quote, который при необходимости экранирует символы в строке.

Демонстрация:

String str = "abc-!?.,;:\"'def";
System.out.println(str.replaceAll("[-!?.,;:\"']", "")); // prints abcdef
3 голосов
/ 17 августа 2011

Вам может понадобиться экранировать двойные кавычки, потому что у вас есть строка в двойных кавычках; но, как говорит Айобе, не избегай остальных. Поместите - в конец группы, однако.

...