Значение совпадения заканчивается пустой строкой - PullRequest
1 голос
/ 08 апреля 2020

Приведенное ниже регулярное выражение присваивает тегу значение от < до >. В качестве значения выбирается только первая строка. Как выбрать все непустые строки под каждым тегом и присвоить «значение» именованной группе?

Используемое регулярное выражение:

(>\s+<(?<tag>[^>]*)>[^$,^\n]*\n(?<value>[^\n]*))?

Входной файл:

> <CompID> 
320856USWA

> <Mop>
169.99398

> <Flag> 
No

> <Location> 
tyt roos>A>0A0.46 
Som 2 rtr Stooms>A>A0>A00 
STOOM tytStockroo>00 
SOM ockro>00 SOM

> <SubLocation> 
5>in 04>tion 2 
M>5uu>T>05 
L>5uhu>M>05 
M>5uu>M>06

$$$$$$

$$$$$$ всегда находится в конце файла и не является частью данных.

1 Ответ

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

Вы можете использовать

>\s+<(?<tag>[^>]*)>\s*\n(?<value>[^\r\n]+(?:\r?\n(?!\r?\n)[^\r\n]+)*)

См. . NET regex demo

Подробности

  • > - тег > char
  • \s+ - 1+ пробелов
  • < - тег < char
  • (?<tag>[^>]*) - " "группа: 0 или более символов, отличных от >
  • > - > char
  • \s*\n - 0+ пробелов и затем новая строка
  • (?<value>[^\r\n]+(?:\r?\n(?!\n)[^\r\n]+)*) - группа «value»:
    • [^\r\n]+ - 1+ символов, кроме CR и LF (я не использую ., поскольку . соответствует CR в. NET regex)
    • (?:\r?\n(?!\r?\n)[^\r\n]+)* - 0+ вхождений
      • \r?\n(?!\r?\n) - последовательности CRLF или LF, за которой не следует другая последовательность CRLF или LF
      • [^\r\n]+ - 1+ символов, кроме CR и LF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...