Есть ли способ найти специальные подстроки в этом случае с помощью регулярных выражений?

У меня есть строка, из которой числа извлекаются в конце строки с регулярным выражением.

Нить:

'0 ДБ'!$B$460

подстрока:

460

Я решаю это следующим образом:

String str = "'0 DB'!$B$460";
String sStr = str.replaceAll(".*?([0-9]+)$", "$1");

Ссылка на старый вопрос: Есть ли способ узнать, сколько цифр в конце строки, не зная точного индекса?

Теперь у меня есть строка другого типа, из которой я хочу извлечь определенные диапазоны.

Нить:

'0 ДБ'!$U$305:$AH$376

Здесь я бы выделил определенные области слева от двоеточия и справа от двоеточия.

Один раз область между знаками доллара ($) и цифрой после нее. Соответствующие области могут иметь разную длину. Часть перед первым знаком доллара может состоять как из букв, так и из цифр.

Так что это будет 4 подстроки.

подстроки:

1: У

2: 305

3: АХ

4: 376

Я тоже думал решить это с помощью регулярных выражений. Но, к сожалению, мои познания в этом отношении ограничены.

Кто-нибудь знает, как я могу решить это с помощью регулярных выражений? Или есть другие способы?

Спасибо

Вы можете использовать 4 группы захвата ^.*?([A-Z])\$(\d+):\$([A-Z]+)\$(\d+)$regex101.com/r/SHMmlM/1 Или части для обеих строк ^.*?([A-Z])\$(\d+)(?::\$([A-Z]+)\$(\d+))?$ regex101.com/r/r5gVSC/1

The fourth bird 18.12.2020 13:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
101
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для этого требования вы можете просто использовать регулярное выражение, (?<=\\$)\\w+ что означает один или несколько словесных символов , которым предшествует$.

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

public class Main {
    public static void main(String[] args) {
        String str = "'0 DB'!$U$305:$AH$376";
        Matcher matcher = Pattern.compile("(?<=\\$)\\w+").matcher(str);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

Выход:

U
305
AH
376

Другой вариант — использовать определенный шаблон, чтобы получить 4 части в виде групп захвата.

^.*?([A-Z])\$(\d+):\$([A-Z]+)\$(\d+)$

Объяснение

  • ^ Начало строки
  • .*? Соответствует любому символу, кроме новой строки, 0+ раз нежадным способом
  • ([A-Z])\$ Захватите персонажа от A до Z в группе 1 и сопоставьте $
  • (\d+):\$ Захватите 1+ цифр из группы 2 и сопоставьте :$
  • ([A-Z]+)\$ Захватите 1+ символов от A до Z в группе 1 и сопоставьте $
  • (\d+) Сопоставьте 1+ цифры в группе 4
  • $ Конец строки

Демонстрация регулярных выражений | Демонстрация Java

Пример кода

String regex = "^.*?([A-Z])\\$(\\d+):\\$([A-Z]+)\\$(\\d+)$";
String string = "'0 DB'!$U$305:$AH$376";

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

while (matcher.find()) {
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println(matcher.group(i));
    }
}

Чтобы также соответствовать обеим строкам примера, вы можете сделать вторую часть необязательной.

^.*?([A-Z])\$(\d+)(?::\$([A-Z]+)\$(\d+))?$

Посмотрите еще одну демонстрацию регулярного выражения

Другие вопросы по теме