разбить строку с помощью регулярных выражений и извлечь результат по группе - PullRequest
1 голос
/ 26 января 2020

Я хочу разбить строку, используя выражение регулярного выражения, но мне не удалось найти правильное выражение, это ниже используемого кода, а также ожидаемый результат, который вы можете запустить в https://www.jdoodle.com/online-java-compiler/

и заменить может регулярное выражение на правильное, спасибо заранее.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MyClass {
    public static void main(String args[]) {
    String[] result   = RegexServiceBusiness("19922 test ibaraki, hamari-shi, hamari 3456789");

      System.out.println("street : " + result [0] + " and the city is : "+ result [1] + " and the full city is : "+ result [2]);
    }

    public static String[] RegexServiceBusiness(String input) {

        String street = null;
        String city = null;
        String fullCity = null;
        String[] result = new String[3];

        String regex = "(.*)(\\w+-shi)";// this regex expression should match the string giving.
        Matcher matcher;
        Pattern pattern = Pattern.compile(regex);

        matcher = pattern.matcher(service);
        if (matcher.matches()) {
            street = matcher.group(0);
            city = matcher.group(1);
            fullCity = matcher.group(2);
        }

        result[0] = street;//19922 test ibaraki
        result[1] = city;//, hamari-shi
        result[2] = fullCity;//, hamari-shi, hamari 3456789

        return result;
    }
}

другой пример и вывод: "19922 test hatachi karashi-shi hamari 3456789"

ожидаемый результат улица : 19922 тест хатачи город : караси-ши полный город : караси-ши хамари 3456789

1 Ответ

3 голосов
/ 26 января 2020

Вместо использования разделения можно использовать 3 группы захвата и вложить 3-ю группу во 2-ю группу и использовать отрицательный класс символов [^,]+, соответствующий любому символу, кроме запятой, и 0 + горизонтальные пробельные символы \h* между

([^,]+),\h*((\w+-shi),\h*[^,]+)

Regex demo | Java demo

Например

String regex = "([^,]+),\\h*((\\w+-shi),\\h*[^,]+)";;
String string = "19922 test ibaraki, hamari-shi, hamari 3456789";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);

if (matcher.matches()) {
    System.out.println(matcher.group(1)); // 19922 test ibaraki
    System.out.println(matcher.group(3)); // hamari-shi, hamari 3456789
    System.out.println(matcher.group(2)); // hamari-shi
}

Соответствует тому, что слева и справа от слова, содержащего -shi

(.+?)((\w+-shi).+)

Regex demo | Java демо

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