Проблема замены слов с помощью регулярного выражения [^ a-zA-Z] - PullRequest
2 голосов
/ 22 ноября 2008

Просто не смог получить этот, и поиск в Google тоже не сильно помог ..

Первое, что я знаю: учитывая строку и регулярное выражение, как заменить все вхождения строк, которые соответствуют этому регулярному выражению, строкой замены? Используйте метод replaceAll () в классе String.

Теперь то, что я не могу сделать. Регулярное выражение, которое у меня есть в моем коде, теперь является [^ a-zA-Z], и я точно знаю, что это регулярное выражение определенно будет иметь диапазон. Только некоторые символы могут быть добавлены в список. Что мне нужно , так как вывод в приведенном ниже коде: Worksheet + blah , но я получаю с помощью replaceAll (): Worksheet ++++ blah

String homeworkTitle = "Worksheet%#5_blah";
String unwantedCharactersRegex = "[^a-zA-Z]";
String replacementString = "+";
homeworkTitle = homeworkTitle.replaceAll(unwantedCharactersRegex,replacementString);
System.out.println(homeworkTitle);

Как добиться желаемого результата? Есть ли какие-либо методы Java, которые мне здесь не хватает?

Ответы [ 2 ]

5 голосов
/ 22 ноября 2008
[^a-zA-Z]+

Будет хорошо.

Вам просто необходим жадный квантификатор , чтобы сопоставить как можно больше неалфавитных символов, и заменить все совпадения на один '+' (a - по умолчанию - жадный квантификатор)

Примечание: [^a-zA-Z]+? сделает квантификатор '+' ленивым и даст тот же результат, что и [^a-zA-Z], поскольку он будет соответствовать только одному не алфавитному символу за раз.

2 голосов
/ 22 ноября 2008
String unwantedCharactersRegex = "[^a-zA-Z]"

Это соответствует одной не-букве. Таким образом, каждая отдельная буква заменяется +. Вам нужно сказать «один или несколько», поэтому попробуйте

String unwantedCharactersRegex = "[^a-zA-Z]+"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...