Возврат заданного количества соответствий регулярному выражению - PullRequest
0 голосов
/ 13 марта 2019

Я хочу выражение регулярного выражения, которое возвращает только два первых совпадения.В этой строке искомое выражение должно возвращать только «Miles Teller» и «JK Simmons» вместо всех совпадений «Miles Teller», «JK Simmons», «Melissa Benoist» ...

'name': 'Miles Teller', 'name': 'J.K. Simmons', 'order': 1, 129104,
 'name': 'Melissa Benoist', 'order': 2, 'profile_path':  970216,
 'name': 'Austin Stowell', 'order': 'gender': 2, 'id': 223012, 'name':
 'Jayson Blair', 'order': 4, 'profile_path':

До сих пор я пробовал (?<='name': ')([^']*) и играл с {2}.Но я не могу найти подходящее место для установки номера.

Пример в regex101: https://regex101.com/r/FRN7ei/1/

Ответы [ 3 ]

1 голос
/ 13 марта 2019

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

Для захвата только первых двух значений атрибута name вам нужно будет отказаться от использования регулярного выражения по осмотру ивместо этого используйте простое регулярное выражение, содержащее группы.Вы можете использовать это регулярное выражение, в котором есть две группы, в которых каждая группа захватывает имя, которое вы намереваетесь захватить, и .* в конце регулярного выражения использует оставшийся текст, чтобы не оставлять возможности для дальнейшего захвата других имен.

'name': '([^']*)'.*?'name': '([^']*)'.*

Демо

Редактировать:

.* из регулярного выражения не требуется, если не используется глобальный модификаторв регулярном выраженииСпасибо sln за напоминание, которое я почти пропустил:)

1 голос
/ 13 марта 2019

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

/'name': '([^']+)', 'name': '([^']+)'/?

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

0 голосов
/ 13 марта 2019

Это не похоже на действительный словарь / объект, но предполагая, что это просто строка, которая выглядит как словарь / объект, вы можете извлечь все имена, используя что-то вроде того, что у вас там было:

(?<='name': ')[^']+

затем сохраните это в список или массив и получите первые два совпадения с обычной индексацией / нарезкой списка.

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