Захват Regex: получить только результат из второй группы - PullRequest
0 голосов
/ 06 января 2020

У меня есть следующая строка:

'pp_3', 365]

То, что идет после pp_, может иметь различную длину. То, что следует после , и до ], - это то, что я хотел бы запечатлеть (и только это). Его длина варьируется, но это всегда число.

Я придумал (?<=pp_).*,(.*)(?=]). Это дает 3', 365 в качестве полного соответствия, и в группе 1 есть то, что я хочу, «365». Как я могу получить только 365 в качестве полного соответствия?

Пожалуйста, дайте мне знать, если я не смогу объяснить мои сомнения. Спасибо

Ответы [ 3 ]

0 голосов
/ 06 января 2020

Попробуйте:

[^_]*_(\d*)'\s*,\s*(\-?\d+)\s*]. 

Это регулярное выражение охватывает 2 группы, соответствующие каждому из чисел: первое после pp_ и второе после ', (что может быть отрицательным). Если вы не хотите захватывать первый как группу, вместо (\d*), просто напишите (?:\d*).

0 голосов
/ 06 января 2020

Чтобы соответствовать только цифрам, и если вы хотите использовать положительный вид сзади, вы можете использовать квантификатор в виде взгляда (который вы можете указать самостоятельно), который поддерживается Java

(?<=pp_[^,]{0,1000}, )\d+(?=])

Пояснение

  • (?<= Позитивный взгляд сзади, утверждают, что слева есть
  • pp_[^,]{0,1000} Соответствует pp_, соответствует любому символу, кроме , 0-1000 раз
  • , Совпадение с запятой и пробелом
  • ) Закрыть взгляд назад
  • \d+ Совпадение 1+ цифр
  • (?=]) Позитивный взгляд, утверждаем, что справа ]

In Java

String regex = "(?<=pp_[^,]{0,1000}, )\\d+(?=])";

Java демо

Вместо этого вы также можете использовать группу захвата:

pp_[^,]*, (\d+)]

Regex demo

0 голосов
/ 06 января 2020

Попробуйте это выражение. Вторая группа должна быть следующей:

(?<='pp_)(\d*', )(\d*)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...