Member 14623559 Ответов: 2

Регулярное выражение для идентификации текста, заключенного в круглые скобки вместе с круглыми скобками в powershell.


ССЫЛКА ПОКУШЕНИЯ НА REGEX101:https://regex101.com/r/lrBKfd/2[^]

У меня есть следующий код для идентификации одной или нескольких групп текста внутри круглых скобок (вместе с круглыми скобками):
\((?!([^)]*\b(ARR)\b[^(]*)).*?\)

Я попытался добавить положительное утверждение Lookbehind, чтобы оно идентифицировало только текст, заключенный в круглые скобки, когда ему предшествует определенный шаблон:
(?<=NA - FY\d\d [A-Z][A-Za-z][A-Z]|(?<=NA - FY\d\d [A-Z][A-Z][A-Z][A-Z])) \((?!([^)]*\b(ARR)\b[^(]*)).*?\)

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

NA - FY17 JCIG (Joint Coord Integration Grp) briefs
NA - FY17 JIPT (Joint Integr Product Tm) briefs
NA - FY17 SoW (Statement of Work)
NA - FY17 SRRB (Serv Requi Review Brd) Quad chart
NA - FY17 UFR (Unfunded Plan) - CYD (Current Year)
NA - FY17 DR (Directors Reviews) briefs
NA - FY17 PP (Phasing Plans)
NA - FY17 Funding Docs
MVSOT (Maritime Vessel)
Он делает то, что я хочу, не захватывая скобки в последних 4 строках текста. Проблема в том, что он не захватывает обе группы текста, заключенные в круглые скобки в строке над ними. В этой строке текста
NA - FY17 UFR (Unfunded Plan) - CYD (Current Year)
он больше не захватывает 2-ю группу текста в скобках. Мне дали регулярное выражение, которое захватывает текст в скобках, поэтому я не совсем уверен, как это работает, но я почти уверен, что положительное утверждение Lookbehind правильно. Может ли кто-нибудь сказать мне, что я упускаю?

Что я уже пробовал:

Ссылка попытки на REGEX101:https://regex101.com/r/lrBKfd/2[^]
Попробовали негативный взгляд сзади ((?

[no name]

Это обязательно должно быть регулярное выражение? Почему бы вместо этого не использовать Linq?

Member 14623559

Спасибо. Не знаком с Linq. Я знаю, что это можно сделать как регулярное выражение, и это то, с чем я знаком.

[no name]

Вы бы предпочли решение Linq вместо этого? Регулярное выражение дорого стоит, когда речь заходит о производительности, поэтому рекомендуется свести его к минимуму.

2 Ответов

Рейтинг:
2

Patrice T

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Онлайн-тестер регулярных выражений и отладчик: PHP, PCRE, Python, Golang и JavaScript[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение: Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]
Этот сайт также показывает регулярное выражение в красивом графике, но не может проверить, что соответствует регулярному выражению: Regexper[^]


Рейтинг:
0

RickZeeland

Видеть это: RegExr: круглые скобки[^]
Так что это будет:

/\(([^)]+)\)/g


Member 14623559

Нет, он снимает тот, который не следует шаблону (MVSOT (морское судно)), который я не хочу, чтобы он делал.

RickZeeland

Понятия не имею, что это значит, извините ! Насколько я вижу, все, что находится между скобками, разбирается правильно.

Member 14623559

Позитивные Утверждения Касательно Предшествующего Текста, (?&ЛТ;=н - \д\и ФГ д [А-я][а-Яа-я][А-я]|(?&ЛТ;=на - ФГ\д\д [А-я][А-я][А-я][А-я])), должны захватывать текст в скобках только, когда следом идет "на - ФГ \д\д". У меня есть ссылка на regex101 в моем первоначальном вопросе, которая может помочь. Если нет, то все равно спасибо за помощь!

RickZeeland

Что-то подобное было бы проще реализовать в C# или другом языке, я думаю, может быть, есть способ сделать это в регулярном выражении, но это займет много времени, чтобы выяснить ...

Member 14623559

Ладно, попался, делает Сенс, спасибо за проницательность.