正则表达式从捕获中排除匹配

Bet*_*033 4 c# regex

在.Net中使用Regex

我将有一组这样的数据

< Bunch o' Data Here >
Run Code Online (Sandbox Code Playgroud)

其中<只是新记录的指标,是记录>的结尾.

这些记录可能会像这样

< Dataset 1><Dataset 2 broken, no closing tag <dataset 3>
Run Code Online (Sandbox Code Playgroud)

他们也可以进来

< Dataset 1>Dataset 2 broken, no opening tag ><dataset 3>
Run Code Online (Sandbox Code Playgroud)

虽然,我不确定后一种情况是否可能,但是当我不得不跨过这座桥时.

我正在尝试使用Regex将这些分成基于这个开始和结束字符的记录,最终是这样的

Match 1 = < Dataset 1>
Match 2 = <Dataset 2 broken, no closing tag 
Match 3 = <Dataset 3>
Run Code Online (Sandbox Code Playgroud)

我试图找出非捕获组如何工作,也许我的理解是错误的.

<.*?(?:<|>)
Run Code Online (Sandbox Code Playgroud)

让我觉得非常接近我认为,除了它包括第三组数据的开头特征与第二组的捕获.我也怀疑它?:没有做它需要的东西,如果它取出它,它返回相同的匹配集(2).

eld*_*his 7

看起来你有翻转.你不想用来?:捕捉一个群体:?.

 <.*?(?:<|>)
Run Code Online (Sandbox Code Playgroud)

要进行扩展:?捕获组中的运算符表示您要执行特殊操作.一种:不捕获的方法,但是您可以提供其他操作数?以执行其他操作.常见的是look-ahead(?=)和look-behind(?<),但还有很多其他的.

我也刚刚意识到你想要匹配的范围(超出非捕获问题).匹配的parens/bracket/etc的语言不规则,所以 - 假设我正确理解你的目的 - 你需要创建一个相当精细的扩展正则表达式,以匹配你想要的.关于此问题还有其他一些问题,其中包括对此进行讨论的问题.