gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:21:54 25 4
gpt4 key购买 nike

在 .Net 中使用正则表达式

我会有一组这样的数据

< Bunch o' Data Here >

哪里<只是新记录的指标,>是记录的结尾。

这些记录可能是这样进来的

< Dataset 1><Dataset 2 broken, no closing tag <dataset 3>

他们也可以进来

< Dataset 1>Dataset 2 broken, no opening tag ><dataset 3>

不过,我不确定后一种情况是否可行,必要时我会跨过那座桥。

我正在尝试使用 Regex 根据这个开始和结束字符将它们拆分成记录,最终是这样的

Match 1 = < Dataset 1>
Match 2 = <Dataset 2 broken, no closing tag
Match 3 = <Dataset 3>

我想弄清楚非捕获组是如何工作的,也许我的理解是错误的。

<.*?(?:<|>)

让我非常接近我认为,除了它包括第三组数据的开始字符和第二组的捕获。我也怀疑 ?:没有做它需要做的事情,如果它把它拿出来,它会返回相同的匹配集(2)。

最佳答案

看起来你把它翻转了。你会想要使用 ?:不捕获组,而不是 :? .

 <.*?(?:<|>)

扩展一下:?捕获组中的运算符表示您想做一些特别的事情。 :意思是不捕获,但是你可以给 ? 其他操作数以便执行其他操作。常见的是向前看 ( ?= ) 和向后看 ( ?< ),但还有很多其他的。

我也刚刚意识到您要匹配的范围(超出非捕获问题)。匹配的括号/括号/等的语言是不规则的,所以 - 假设我正确理解你的目的 - 你需要创建一个相当复杂的扩展正则表达式才能匹配你想要的。关于此还有其他几个 SO 问题,包括 this one其中有一些讨论。

关于c# - 正则表达式从捕获中排除匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3346513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com