Регулярное выражение захватывает начальное слово, а не группу, которую я хочу - PullRequest
0 голосов
/ 08 января 2020

Мне нужно проанализировать данные, которые выглядят так:

bestPerDoseProductByContract":{"code":"1245678" ...<lots of characters here>... "indicator":"blue" 

Теперь это повторяется примерно так ...

bestPerDoseProductByContract":{"code":"87654321" ...<lots of characters here>... "indicator":"green"

и т. Д.

Мне нужно значение \d+ (в данном случае 87654321), где бы оно ни находилось с зеленым индикатором

Я пытался это вот что ..

bestPerDoseProductByContract":{"code":"(\d+).*"indicator":"green"

Но это захватывает с самого начала значение. DOT и STAR - это проблема. Я ТОЛЬКО хочу понять, где выражение начинается с bestPerDoseProductByContract":{"code":" .... и заканчивается "indicator":"green". Я хочу, чтобы ди git значение (\d+) от «ЗЕЛЕНЫЙ». Я получаю первое значение di git, через которое оно проходит.

Я не очень хорошо разбираюсь в Reg Exp, но изучил Boun dry Words, Start of String (это было неправильно).

Любое объяснение исправления приветствуется.

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Вы правы в том, что проблема .*, потому что она жадная (потребляет все, что может, в то же время сопоставляя).

Используйте отрицательный взгляд, чтобы не пропустить "indicator" с вашим .*, например:

bestPerDoseProductByContract":{"code":"(\d+)((?!"indicator").)*"indicator":"green"

См. live demo .

Этот (?!"indicator") является негативным прогнозом и означает, что «следующие символы не должны быть "indicator".

Применение этого значения к . меняет точку на соответствие чему-либо , чтобы сопоставить что-либо кроме лидирующего " из "indicator", таким образом, совпадение никогда не будет охватывать несколько bestPerDoseProductByContracts.

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

Если вы не хотите захватывать что-либо еще с этим регулярным выражением, вы можете просто использовать это:

\d+(?=.*"indicator":"green")

Это простой позитивный взгляд, который

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

. Преимущество этого решения в том, что, если ...<lots of characters here>... включает "indicator" по какой-то причине, оно все еще работает.

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

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