Разделение строк, включая символы с акцентом
Я использую это регулярное выражение:
x.split("[^a-zA-Z0-9']+");
Возвращает массив строк с буквами и/или цифрами.
Если я использую это:
String name = "CEN01_Automated_TestCase.java";
String[] names = name.Split.split("[^a-zA-Z0-9']+");
Я получил:
CEN01
Automated
TestCase
Java
Но если я использую это:
String name = "CEN01_Automação_Caso_Teste.java";
String[] names = name.Split.split("[^a-zA-Z0-9']+");
Я получил:
CEN01
Automa
o
Caso
Teste
Java
Как я могу изменить это регулярное выражение, чтобы включить символы с акцентом? (á, ã, õ и т.д.)
Ответы
Ответ 1
Из http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
Категории, которые ведут себя как методы java.lang.Character boolean ismethodname
(кроме устаревших), доступны через тот же синтаксис \p{prop}
, где указанное свойство имеет имя javamethodname
.
Так как класс Character
содержит isAlphabetic
метод, вы можете использовать
name.split("[^\\p{IsAlphabetic}0-9']+");
Вы также можете использовать
name.split("(?U)[^\\p{Alpha}0-9']+");
но вам нужно будет использовать флаг UNICODE_CHARACTER_CLASS
, который можно использовать, добавив (?U)
в regex.
Ответ 2
Я бы просмотрел Java-документацию по регулярным выражениям. Существует раздел юникода, который, я считаю, является тем, что вы можете искать.
EDIT: Пример
Другой способ - совпадение кода символа, который вы ищете. Например
\uFFFF where FFFF is the hexadecimal number of the character you are trying to match.
Пример: \u00E0 matches à
Поймите, что обратная косая черта должна быть экранирована в Java, если вы используете ее как строковый литерал.
Подробнее об этом здесь.
Ответ 3
Вы можете использовать это:
String[] names = name.split("[^a-zA-Z0-9'\\p{L}]+");
System.out.println(Arrays.toString(names));
Выведет:
[CEN01, Automação, Caso, Teste, java]
Для получения дополнительной информации см. this.
Ответ 4
Почему бы не разделить на разделительные символы?
String[] names = name.split("[_.]");
Ответ 5
Вместо черного списка всех символов, которые вы не хотите, вы всегда можете выбрать символы, которые хотите:
^[^<>%$]*$
Выражение [^ (здесь много символов)] просто соответствует любому символу, который не указан.
Но это личное мнение.