2016-01-18 3 views
1

У меня есть строка, как показано ниже в файле, и хотелось бы найти каждое вхождение строки на основе шаблона начала и конца.Регулярное выражение - шаблон начала и конца

STX = АНАК: 1 + 5013546100993 + 5033075994542LI0927030002 + 5033075994542'MTR = = 4'STX ​​3'-конец = АНАК: 1 + 5013546100993 + 5033075994542: 1: D: 068 :: 288: 10941/101'OTR = 8'MTR = 53'END = 7'UNA: +.? «DNB = 1'MTR = = 5''STX 3'-конец = АНАК: 1 + 5013546100893 + 5033075994542: 1: D: 068 :: 288: 10941/101''OTR = 8''MTR = 53''END = 9

Я хотел бы найти строку, которая соответствует шаблону, начинается с STX или UNA и заканчивается перед началом следующего сегмента STX или UNA.

для строки выше I хотел бы вывести, как показано ниже

1) STX = АНАКА: 1 + 5013546100993 + 5033075994542LI0927030002 + 5033075994542'MTR = 4' = 3'-конца

2) РАС + .? 'DNB = 1'MTR = 3'END = 5' '

3) STX = ANAA: 1 + 5013546100893 + 5033075994542: 1: D: 068 :: 288: 10941/101''OTR = 8''MTR = 53''END = 9

Я написал мое регулярное выражение, как показано ниже

string pattern = "(STX|UNA.*)STX|UNA" 

Но она всегда возвращает первый матч.

С уважением, Аланами

ответ

1

Ваше регулярное выражение фиксирует начало следующего матча. Вы должны исключить его:

(STX|UNA).*?(?=(STX|UNA|$))

0

Вы должны сделать свои регулярные выражения, чтобы сделать нежадный матч. BTW ваше регулярное выражение должно быть,

(STX|UNA).*?(STX|UNA) 

(STX|UNA.*) в своем регулярном выражении будет соответствовать STX или UNA плюс ноль или более символов.

0

Regex в C#

string strRegex = @"((STX)[^""""""""]*END=[0-9])('STX)|((UNA:+.?)[^""""""""]*END=[0-9]'')|((STX)[^""""""""]*END=[0-9])"; 

Он имеет семь матчей 1,4,6 являются вашими ожидаемыми матчами, попробуйте

Смежные вопросы