Привет, ребята, я пытаюсь выбрать конкретную строку из текста, но я не мастер регулярных выражений. Я пробовал один способ, и он начинается со строки, которую я хочу, но также соответствует всему, что я хочу.
Мое регулярное выражение:
\nSCR((?s).*)(GI|SI)(.*?)\n
Текст, по которому я подбираю.
Hierbij een test
SCR
S09
/vince@test.be
05FEB
GI BRGDS OPS
middle text string (may not selected)
SCR
S09
05FEB
LHR
NPVT700 PVT701 30MAR30MAR 1000000 005CRJ FAB1900 07301NCE DD
/ RE.GBFLY/
GI BRGDS
Выбрана средняя струна, ей нужен только SCR до линии GI.
2 ответа
Чтобы сопоставить строку, начинающуюся с SCR
, со строкой, начинающейся с GI
или SI
(включительно), вы должны использовать следующее регулярное выражение:
(?m:^SCR\n(?:^(?!GI|SI).*\n)*(?:GI|SI).*)
Это будет:
- Найдите начало строки.
- Сопоставьте
SCR
и новую строку. - Соответствовать всем строкам, не начинающимся с
GI
илиSI
. - Соответствует последней строке, требуя наличия
GI
илиSI
(это предотвращает совпадение с концом строки, если нетGI
илиSI
.
GI
или SI
, регулярное выражение не должно совпадать. Теперь мое регулярное выражение и его второе регулярное выражение очень похожи, за исключением того, что мое использует привязку начала строки ^
вместо сопоставления новой строки.
Используйте нежадный квантификатор также для первого квантификатора:
\nSCR((?s).*?)(GI|SI)(.*?)\n
Или вы можете использовать отрицательное утверждение прогнозирования (?!
expr
)
для захвата только тех строк, которые не начинаются ни с GI
, ни с SI
:
\nSCR((?:\n(?!GI|SI).*)*)\n(?:GI|SI).*\n
Похожие вопросы
Новые вопросы
regex
Регулярные выражения предоставляют декларативный язык для сопоставления шаблонов в строках. Они обычно используются для проверки, синтаксического анализа и преобразования строк. Поскольку регулярные выражения не полностью стандартизированы, все вопросы с этим тегом должны также включать тег, определяющий применимый язык программирования или инструмент.