Вы можете использовать
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 .