Совпадение до 0 или 1 - PullRequest
       1

Совпадение до 0 или 1

0 голосов
/ 25 октября 2018

Используя приведенный ниже код, я пытаюсь разбить строку «это тест 1» на массив, где первый элемент содержит строку «это тест», а второй элемент содержит 1.

final Pattern mp = Pattern.compile("/.+?(?=0|1)/");
System.out.println(Arrays.asList(mp.split("this is a test 1")[0]));

Когда я выполняю этот код, отображается следующее:

[this is a test 1]

Регулярное выражение "/.+?(?=0|1)/" предназначено для соответствия всем строкам, пока не встретится 1 или 0.

Как вернуть массив («это тест», 1)?

Обновление:

Должно ли это также возвращать тот же шаблон:

final Pattern reg = Pattern.compile("/.+?(?=0|1)/");
    System.out.println(reg.matcher("this is a test 1").group(0));

Выдает исключение:

Exception in thread "main" java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:536)
    at First.main(First.java:58)

Но по сути тот же код, но короче?

Ответы [ 4 ]

0 голосов
/ 25 октября 2018

Вы хотите разделить пробел, предшествующий 1|0, поэтому вы можете использовать предварительное утверждение:

String res = "this is a test 1 and 0 is it".split(" (?=(0|1))")

, которое возвращает { "this is a test", "1 and", "0 is it" }

0 голосов
/ 25 октября 2018

Попробуйте регулярное выражение (?=0|1), чтобы разбить строку на this is a test и 1.

String mp="this is a test 1";
System.out.println(Arrays.asList(mp.split("(?=0|1)")));
0 голосов
/ 25 октября 2018

Используйте это

    String text="this is a test 1";
    System.out.println(Arrays.asList(text.split("(?=[01])")));
0 голосов
/ 25 октября 2018

У вас есть шаблон, но вам действительно нужно создать Matcher, чтобы сопоставить строку с вашим шаблоном.Пример можно найти ниже:

public static void main(String[] args) {
    final String regex = ".+?(?=0|1)";
    final String string = "this is a test 1";

    final Pattern pattern = Pattern.compile(regex);
    final Matcher matcher = pattern.matcher(string);

    if (matcher.find()) {
        System.out.println(matcher.group(0));
    }
}

Похоже, что вы хотите иметь оба элемента, но ваше текущее регулярное выражение этого не позволяет.Попробуйте использовать (.+?)([0-1]), который поместит оба этих элемента в группы.Пример:

public static void main(String[] args) {
    final String regex = "(.+?)([0-1])";
    final String string = "this is a test 1";

    final Pattern pattern = Pattern.compile(regex);
    final Matcher matcher = pattern.matcher(string);

    if (matcher.find()) {
        System.out.println(matcher.group(1));
        System.out.println(matcher.group(2));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...