我在文件中有如下字符串,并希望根据开始和结束模式找到每次出现的字符串。
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"
但它总是返回第一场比赛。
的问候, 艾伦
答案 0 :(得分:1)
你的正则表达式捕获了下一场比赛的开始。你应该排除它:
答案 1 :(得分:0)
你需要让正则表达式进行非贪婪的匹配。顺便说一句,你的正则表达式必须是,
(STX|UNA).*?(STX|UNA)
你的正则表达式中的 (STX|UNA.*)
会匹配STX
或UNA
加上零个或多个字符。
答案 2 :(得分:0)
c#中的正则表达式
string strRegex = @"((STX)[^""""""""]*END=[0-9])('STX)|((UNA:+.?)[^""""""""]*END=[0-9]'')|((STX)[^""""""""]*END=[0-9])";
它有7场比赛1,4,6是你的预期比赛,试试吧