как получить число между двумя символами? - PullRequest
3 голосов
/ 05 мая 2019

У меня есть эта строка:

String values="[52,52,73,52],[23,32],[40]";

Как получить только число 40?

Я пробую этот шаблон "\\[^[0-9]*$\\]", мне не повезло.

Может ли кто-нибудь предоставить мне соответствующий шаблон?

Ответы [ 4 ]

3 голосов
/ 05 мая 2019

Нет необходимости использовать ^

Правильное регулярное выражение здесь \\[([0-9]+)\\]$

Если вы уверены в единственном числе внутри [], это простое регулярное выражение будет делать

\\[(\d+)\\]

1 голос
/ 05 мая 2019

Учитывая, что вы, похоже, используете Java, я рекомендую воспользоваться String#split здесь:

String values = "[52,52,73,52],[23,32],[40]";
String[] parts = values.split("(?<=\\]),(?=\\[)");
String[][] contents = new String[parts.length][];

for (int i=0; i < parts.length; ++i) {
    contents[i] = parts[i].replaceAll("[\\[\\]]", "").split(",");
}

// now access any element at any position, e.g.
String forty = contents[2][0];
System.out.println(forty);

То, что генерирует приведенный выше фрагмент, представляет собой jagged 2D Java String array,где первый индекс соответствует массиву в исходном CSV, а второй индекс соответствует элементу внутри этого массива.

1 голос
/ 05 мая 2019

Вы можете обновить свой шаблон, чтобы использовать группу захвата и квантификатор + после класса символов, и опустить привязку ^, чтобы утверждать начало строки.

Измените привязку для подтверждения конца строки $ до конца шаблона:

\\[([0-9]+)\\]$
   ^     ^^   

Regex demo | Java-демонстрация

Например:

String regex = "\\[([0-9]+)\\]$";
String string = "[52,52,73,52],[23,32],[40]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
if(matcher.find()) {
    System.out.println(matcher.group(1)); // 40
}
0 голосов
/ 05 мая 2019

Почему бы просто не использовать String.substring, если вам нужно содержимое между последним [ и последним ]:

String values = "[52,52,73,52],[23,32],[40]";       
String wanted = values.substring(values.lastIndexOf('[')+1, values.lastIndexOf(']'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...