Я хочу в точности соответствовать 2 раза с регулярным выражением - PullRequest
2 голосов
/ 04 апреля 2020

У меня есть что-то вроде этой строки.

XXXX ^^^ 141409i1 ^^^ XXXX.

Я хочу сопоставить эти 3 ^ в группе и группа ровно 2 раза. Я написал это, но это не похоже на работу.

(?:(\^){3}){2}

РЕДАКТИРОВАТЬ

Я должен разделить его и извлечь число в середине. Дело в том, что эта группа должна состоять ровно из 3 ^ и ровно 2 раза. Если первая группа имеет только 1 или 2 ^, она прекращает сопоставление. Эта строка вводится пользователем, и если он вводит больше, чем эта строка, например XXXX^^^141409i1^^^XXXX^^^^XXXX, то она не должна соответствовать последней группе, только первой 2. (Извините, если я слишком неоднозначен.)

РЕДАКТИРОВАТЬ2

Смысл упражнения состоит в том, чтобы разбить строку и получить число посередине, я написал эту строку, но проблема в том, что она соответствует каждому ^^^, и я хочу, чтобы совпадение совпадало только 2 раза.

String[] split = s.split("(\\^){3}"); 

1 Ответ

0 голосов
/ 04 апреля 2020

Если я правильно понял, что вы хотите, надеюсь, вам это поможет:

String input = "XXXX^^^141409i1^^^XXXX^^^^XXXX";
Pattern pattern = Pattern.compile(".*?\\^{3}(\\w+)\\^{3}");
Matcher matcher = pattern.matcher(input);

if (matcher.find()) {
    System.out.println("The number in the middle: " + matcher.group(1));
}

Вывод:

The number in the middle: 141409i1

Здесь вы можете увидеть, как это работает: https://regexr.com/51r9e

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