在.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).
看起来你有翻转.你不想用来?:捕捉一个群体:?.
<.*?(?:<|>)
Run Code Online (Sandbox Code Playgroud)
要进行扩展:?捕获组中的运算符表示您要执行特殊操作.一种:不捕获的方法,但是您可以提供其他操作数?以执行其他操作.常见的是look-ahead(?=)和look-behind(?<),但还有很多其他的.
我也刚刚意识到你想要匹配的范围(超出非捕获问题).匹配的parens/bracket/etc的语言不规则,所以 - 假设我正确理解你的目的 - 你需要创建一个相当精细的扩展正则表达式,以匹配你想要的.关于此问题还有其他一些问题,其中包括对此进行讨论的问题.