регулярное выражение не удаляет подчеркивание из шаблона - PullRequest
3 голосов
/ 17 апреля 2019

Я пытался написать код для разрешения определенных специальных символов в строке, используя java.util.regex.Matcher и java.util.regex.pattern, но это не удаляет подчеркивание из этого. Я здесь новенький. Мне нужна помощь в этом. Выдержка из кода ниже:

  // String to be scanned to find the pattern.
  String line = "This order was _:$ placed for QT3000! OK?";
  String pattern = "[^\\w\\s\\-?:().,'+\\/]";
  String s = null;

  // Create a Pattern object
  Pattern r = Pattern.compile(pattern);

  // Now create matcher object.
  Matcher m = r.matcher(line);
  s= m.replaceAll("");
  System.out.println("Output: " + s);

Ожидается: этот заказ был размещен для QT3000? Фактически: этот заказ был _: размещен для QT3000 OK?

1 Ответ

6 голосов
/ 17 апреля 2019

Шаблон \w соответствует подчеркиванию, а [^\w] соответствует любому символу, кроме букв, цифр и подчеркивания.

Заменить на \p{Alnum}:

String pattern = "[^\\p{Alnum}\\s?:().,'+/-]";

Примечание. Я ставлю дефис в конце класса символов, чтобы не экранировать его, и удаляю экранирующий \ из * 1010.* поскольку это не специальный метасимвол регулярного выражения.

См. демонстрационную версию Java regex .

Шаблон [^\\p{Alnum}\\s?:().,'+/-] соответствует любому символу, но:

  • \p{Alnum} - буквенно-цифровой [a-zA-Z0-9]
  • \s - пробелы
  • ? - знак вопроса
  • : - двоеточие
  • ( - символ (
  • ) - символ )
  • . - точка
  • , - aзапятая
  • ' - одиночная кавычка
  • + - плюс
  • / - косая черта
  • - -дефис.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...