Совпадения с регулярными выражениями

1

У меня есть строка: 154545K->12345K(524288K)

Предположим, я хочу извлечь числа из этой строки.

Строка содержит группу 154545 в позиции 0, 12345 в позиции 1 и 524288 в положении 2.

Используя regex \\d+, мне нужно извлечь 12345 который находится в позиции 1.

Я получаю желаемый результат, используя это:

String lString = "154545K->12345K(524288K)";
Pattern lPattern = Pattern.compile("\\d+");
Matcher lMatcher = lPattern.matcher(lString);
String lOutput = "";
int lPosition = 1;
int lGroupCount = 0;
while(lMatcher.find()) {
    if(lGroupCount == lPosition) {
    lOutput = lMatcher.group();
    break;
}
else {
    lGroupCount++;
}
}
System.out.println(lOutput);

Но есть ли другой простой и прямой способ достичь этого, сохраняя регулярное выражение \\d+ (без использования группового счетчика)?

Теги:
pattern-matching

2 ответа

1

Если вы ожидаете, что ваш номер будет в позиции 1, вы можете использовать метод find(int start) подобный этому

if (lMatcher.find(1) && lMatcher.start() == 1) {
    // Found lMatcher.group()
}

Вы также можете преобразовать свой цикл в цикл для получения некоторого кода шаблона

String lString = "154540K->12341K(524288K)";
Pattern lPattern = Pattern.compile("\\d+");
Matcher lMatcher = lPattern.matcher(lString);


int lPosition = 2;
for (int i = 0; i < lPosition && lMatcher.find(); i++) {}

if (!lMatcher.hitEnd()) {
    System.out.println(lMatcher.group());
}
1

попробуй это

String d1 = "154545K->12345K(524288K)".replaceAll("(\\d+)\\D+(\\d+).*", "$1");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню