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

本文关键字:结束 模式 开始 正则表达式 | 更新日期: 2023-09-27 18:30:56

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

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

4'STX=ANAA:1+5013546100993+5033075994542:1:D:068::288:10941/101'OTR=8'MTR=53'END=7'UNA:+.?'DNB=1'MTR=3'END=5''STX=ANAA:1+5013546100893+5033075994542:1:D:068::288:10941/101''OTR=8''MTR=53''END=9

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

在上面的字符串中,我想拉如下

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

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"

但它总是返回第一个匹配项。

问候艾伦

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

您的正则表达式捕获下一场比赛的开始。您应该将其排除在外:

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

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

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

正则表达式中的(STX|UNA.*)将匹配STXUNA加上零个或多个字符。

c# 中的正则表达式

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

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