Я работаю над C# Regex.Получить группу захвата всех итераций
Введите текст:
headera
aa1aaa
aa2aaa
aa3aaa
headerb
aa4aaa
aa5aaa
aa6aaa
headerc
aa7aaa
aa8aaa
aa9aaa
Я хотел бы, чтобы захватить число 4, 5 и 6 только, которые находятся между headerb и headerc
Мои попытки:
I смог захватить их под заголовками и заголовком с рисунком ниже. Я не могу применить ту же концепцию на lookbehind, так как это должно быть нулевой ширины, поэтому квантификаторы не допускаются.
aa(\d+)aaa(?=[\s|\S]*headerc)
Повторение группы захвата будет захватывать только последнюю итерацию. Я не могу применять какое-то неоднозначное регулярное выражение для нескольких экземпляров.
Пожалуйста, помогите. Thanks
[SOLVED] Использование преимуществ .Net, способного поддерживать внешний вид переменной ширины. Вы можете использовать шаблоны ниже:
@"(?<=headerb[\s|\S]*)aa(\d)aaa(?=[\s\S]*headerc)"
@"(?s)(?<=\bheaderb\b.*?)\d+(?=.*?\bheaderc\b)"
@"(?<=\bheaderb\b(?:(?!\bheaderc\b)[\s\S])*)aa(\d+)aaa"
Я бы рекомендовал сначала отфильтровать строки между 'headerb' и' headerc', а затем применить регулярное выражение к этим строкам выбора. –
Я считаю, что вы можете использовать ['(?: Headerb | (?! ^) \ G) \ D * (\ d +) \ D * (? =. * Headerc)'] (http://regexstorm.net/tester ? р = (% 3f% 3aheaderb% 7c (% 3f!% 5e)% 5cG)% 5CD * (% 5CD% 2b)% 5CD * (% 3f% 3d. * headerc) & я = Headera% 0d% 0aaa1aaa% 0дн % 0aaa2aaa% 0d% 0aaa3aaa% 0D% 0A% 0D% 0aheaderb% 0d% 0aaa4aaa% 0d% 0aaa5aaa% 0d% 0aaa6aaa% 0D% 0A% 0D% 0aheaderc% 0d% 0aaa7aaa% 0d% 0aaa8aaa% 0D% 0aaa9aaa & O = s), но это может быть неэффективное решение. Аналогичный: ['(? S) (? <= \ Bheaderb \ b. *?) \ D + (? =. *? Headerc)'] (http://goo.gl/9NXp9h). Что касается * квантификаторов не допускается * - в .NET regex, lookbehinds являются переменной шириной. –
Пожалуйста, смотрите [«Если вопросы включают« теги »в их названиях?»] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), где консенсус «нет, они не должны»! –