Подтвердить что ты не робот

Разделение строк, включая символы с акцентом

Я использую это регулярное выражение:

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

Как я могу изменить это регулярное выражение, чтобы включить символы с акцентом? (á, ã, õ и т.д.)

4b9b3361

Ответ 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

Вместо черного списка всех символов, которые вы не хотите, вы всегда можете выбрать символы, которые хотите:

^[^<>%$]*$

Выражение [^ (здесь много символов)] просто соответствует любому символу, который не указан.

Но это личное мнение.