正则表达式 - 开始和结束模式

时间:2016-01-18 05:58:20

标签: c# regex

我在文件中有如下字符串,并希望根据开始和结束模式找到每次出现的字符串。

STX = ANAA:1 + 5013546100993 + 5033075994542LI0927030002 + 5033075994542' MTR = 3' END = 4' STX = ANAA:1 + 5013546100993 + 5033075994542:1:d:068 :: 288:一百零一分之一万零九百四十一' OTR = 8' MTR = 53' END = 7' UNA:+。? ' DNB = 1' MTR = 3' END = 5'' STX = ANAA:1 + 5013546100893 + 5033075994542:1:d:068 :: 288:一百○一分之一万○九百四十一&#39 ;' OTR = 8'' MTR = 53'' END = 9

我想找到匹配模式的字符串以STX或UNA开头,并在STX或UNA的下一段开始之前结束。

上面的字符串我想拉下面

1)STX = ANAA:1 + 5013546100993 + 5033075994542LI0927030002 + 5033075994542' MTR = 3' END = 4'

2)UNA:+。? ' 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"

但它总是返回第一场比赛。

的问候, 艾伦

3 个答案:

答案 0 :(得分:1)

你的正则表达式捕获了下一场比赛的开始。你应该排除它:

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

答案 1 :(得分:0)

你需要让正则表达式进行非贪婪的匹配。顺便说一句,你的正则表达式必须是,

(STX|UNA).*?(STX|UNA)
你的正则表达式中的

(STX|UNA.*)会匹配STXUNA加上零个或多个字符。

答案 2 :(得分:0)

c#中的正则表达式

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

它有7场比赛1,4,6是你的预期比赛,试试吧