Regex Java регулярное выражение для извлечения первых алфавитных символов - PullRequest
0 голосов
/ 31 мая 2018

Как извлечь первые алфавитные символы в Java, например, после применения регулярного выражения в строке "ABD123EZ13 Я должен получить" ABD ", возможно ли это, я искал некоторое время и ничего не нашел.

Я нахожу это регулярное выражение:

String firstThreeCharacters = str.replaceAll("(?i)^[^a-z]*([a-z])[^a-z]*([a-z])[^a-z]*([a-z]).*$", "$1$2$3")

Для извлечения первых n символов, но не проверяется, являются ли они символами алфавита или нет.

Другие примеры:

"AAAA" => "AAAA"

"1231" => ""

"_ abvbv" => ""

"abd_12df" => "abd«

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете использовать

String result = s.replaceFirst("(?s)\\P{L}.*", "");

См. Демоверсию regex

Подробности

  • (?s)- модификатор Pattern.DOTALL, чтобы . соответствовал символу разрыва строки
  • \\P{L} - любой символ, кроме буквы Unicode
  • .* - любые символы 0+, вплоть доконец строки.

Вам не нужно replaceAll, поскольку будет выполняться только 1 операция замены, replaceFirst в порядке.

Если вам нужно обрабатывать только ASCIIбуквы, замените \\P{L}, замените на \\P{Alpha}, который соответствует только любым символам, отличным от букв ASCII.

Вероятно, подход с совпадением будет проще всего с шаблонами ^\p{L}+ или ^\p{Alpha}+, которые соответствуют 1 или более буквтолько с начала строки:

String s = "abd_12df";
Pattern pattern = Pattern.compile("^\\p{L}+"); // or just Pattern.compile("^[a-zA-Z]+") to get the first one or more ASCII letters
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
    System.out.println(matcher.group(0)); 
} 

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

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