Использование регулярного выражения в Java для извлечения информации из строки - PullRequest
0 голосов
/ 03 мая 2018

У меня есть один вход String, как это:

"I am Duc/N Ta/N Van/N" 

Строка "/N" Представьте, что это Имя одного человека.
Ожидаемый результат:

Имя: Дук Та Ван

Как я могу сделать это с помощью регулярного выражения?

Ответы [ 3 ]

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

Вы можете использовать Pattern и Matcher следующим образом:

String input = "I am Duc/N Ta/N Van/N";
Pattern pattern = Pattern.compile("([^\\s]+)/N");
Matcher matcher = pattern.matcher(input);
String result = "";
while (matcher.find()) {
    result+= matcher.group(1) + " ";
}

System.out.println("Name: " + result.trim());

выход

Name: Duc Ta Van

Другое решение с использованием Java 9 +

Из Java9 + вы можете использовать Matcher::results, например:

String input = "I am Duc/N Ta/N Van/N";
String regex = "([^\\s]+)/N";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
String result = matcher.results().map(s -> s.group(1)).collect(Collectors.joining(" "));

System.out.println("Name: " + result); // Name: Duc Ta Van
0 голосов
/ 03 мая 2018

Я использовал "[/ N] +" как регулярное выражение.

Regex101

[] = Соответствует символам внутри набора

\/ = Соответствует символу / буквально (с учетом регистра)

+ = Соответствует от одного до неограниченного количества раз, сколько возможно, возвращая при необходимости (жадный)

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

Здесь используется регулярное выражение для захвата каждого «имени», перед которым стоит /N

(\w+)\/N

Подтвердить с помощью Regex101

Теперь вам просто нужно выполнить цикл при каждом совпадении в этом String и объединить, чтобы получить результат:

String pattern = "(\\w+)\\/N";
String test = "I am Duc/N Ta/N Van/N";
Matcher m = Pattern.compile(pattern).matcher(test);

StringBuilder sbNames = new StringBuilder(); 
while(m.find()){
    sbNames.append(m.group(1)).append(" ");
}
System.out.println(sbNames.toString());

Дык Та Ван

Это дает вам самое сложное. Я позволю вам адаптировать это, чтобы соответствовать вашим потребностям.

Примечание:
В Java не требуется избегать косой черты, но для использования одного и того же регулярного выражения во всем ответе я оставлю "(\\w+)\\/N", но "(\\w+)/N" также будет работать.

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