Найти строку с помощью специального символа с помощью регулярных выражений - PullRequest
0 голосов
/ 20 января 2012

Мне нужно прокрутить список и удалить все строки, содержащие специальный символ. Используя RegEx, я могу удалить все строки, начинающиеся с этих специальных символов, но как я могу найти этот специальный символ в середине строки?

Например:

Pattern.matches("[()<>/;\\*%$].*", "(123)") 

возвращает true, и я могу удалить эту строку

но это не работает с такой строкой: 12 (3).

Правильно ли использовать \ * для нахождения вхождения символа "*" в строку?

Спасибо за помощь! Andrea

Ответы [ 3 ]

5 голосов
/ 20 января 2012

Вы - еще одна жертва плохо названного Java .matches(), который пытается сопоставить ввод целом и противоречит самому определению соответствия регулярному выражению.

То, что вы хотите, соответствует одному символу среди ()<>/;\\*%$. В Java вам нужно создать Pattern, Matcher из этого Pattern и использовать .find() для этого сопоставителя:

final Pattern p = pattern.compile("[()<>/;\\*%$]");

final Matcher m = p.matcher(yourinput);

if (m.find()) // match, proceed
2 голосов
/ 20 января 2012

Попробуйте выполнить следующее:

!Pattern.matches("^[^()<>/;\\*%$]*$", "(123)")

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

Затем вы, очевидно, отрицаете выражение, так как вы проверяете строку, которая не соответствует.

Правильно ли использовать \ * для нахождения вхождения символа "*" встрока?

Да.

0 голосов
/ 20 января 2012

Pattern.matches() пытается сопоставить ввод целом . Так как ваше регулярное выражение говорит, что ввод должен начинаться со "специального" символа, 12(3) не совпадает.

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