Сотрите любую строку, которая не соответствует шаблону, используя replaceall () - PullRequest
0 голосов
/ 29 декабря 2018

Мне нужно заменить ВСЕ символы, которые не следуют шаблону, на "".

У меня есть строки вроде:

MCC-QX-1081
TEF-CO-QX-4949
SPARE-QX-4500

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

String regex = "[^QX,-,\\d]";

Используя метод replaceAll String, я получаю QX1081 и ожидаемый результат QX-1081

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

Поместите тире в конец регулярного выражения: [^ QX, \ d-] Далее вам просто нужно подстроку отфильтровать первый тире.Не знаю точно, что вы ожидаете от всех строк, но если вы хотите сопоставить тире в классе символов, тогда он должен быть установлен как последний символ.

0 голосов
/ 29 декабря 2018

Вы используете класс символов, в котором вы должны либо экранировать дефис, либо поставить его в начале или в конце, как [^QX,\d-], либо вы соответствуете диапазону от запятой до запятой.Но изменение, которое даст вам -QX-1081, что не является желаемым результатом.

Вы можете сопоставить свой шаблон и затем заменить его первой группой захвата $1:

^(?:[A-Z]+-)+(QX-\d+)$

В JavaВы должны удвоить escape, совпадая с цифрой \\d

Это будет соответствовать:

  • ^ Начало строки
  • (?:[A-Z]+-)+ Повторить 1+ разодин или несколько символов в верхнем регистре с последующим дефисом
  • (QX-\d+) Захват в группе QX- с последующими 1+ цифрами
  • $ Конец строки

Например:

String result = "MCC-QX-1081".replaceAll("^(?:[A-Z]+-)+(QX-\\d+)$", "$1");
System.out.println(result); // QX-1081  

См. Демонстрационную версию Regex | Java demo

Обратите внимание, что если вы делаете только 1 замену, вы также можете использовать replaceFirst

0 голосов
/ 29 декабря 2018

Вы используете класс символов , который соответствует отдельным символам, а не шаблонам.

Вы хотите что-то вроде

String resultString = subjectString.replaceAll("^.*?(QX-\\d+)?$", "$1");

, которое работает, пока ничего не следуетQX-digits часть в ваших строках.

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