gpt4 book ai didi

c# - 带有空组 "()"的正则表达式返回奇怪的结果

转载 作者:太空狗 更新时间:2023-10-30 00:58:50 28 4
gpt4 key购买 nike

这有点过分了,但是这个正则表达式 - "()"出现以下情况:当用于将字符串拆分为 string[] 数组时,结果对我来说有些奇怪。例如这行代码:

string[] res = new Regex("()").Split("hi!");

res 设置为 9 个 (!) 元素的数组:["","","h","","i","","!","", ""]

我希望它返回这 5 个元素:["h", "", "i", "", "!"].我需要这个特定结果的原因是为了与另一个正则表达式库兼容......

我的问题是,这种行为可能是由于正则表达式对象缺少某些选项或某些编码问题或类似问题......或者它以某种方式确定并且绝对是它应该工作的正确方式?另外,有没有办法强制它返回第二个(预期的)结果呢?

最佳答案

我已经使用 | 字符指出了您的正则表达式匹配的位置:“|h|i|!|”

Split 返回一个数组,其元素全部在两个相邻匹配项之间,或者在字符串开头和第一个匹配项之间,或者在最后一个匹配项和字符串结尾之间。它按照它们在字符串中出现的顺序返回它们。这给出了这个结果:["","h","i","!",""]

这解释了 9 个数组元素中的 5 个。

但是,“如果在 Regex.Split 表达式中使用捕获括号,则任何捕获的文本都将包含在生成的字符串数组中。” (直接引用自 msdn,此处:http://msdn.microsoft.com/en-us/library/ze12yx1d.aspx)

在这种情况下,捕获的文本是空字符串。因为我们有 4 个匹配项,所以这解释了结果中的其他 4 个元素。

因此,完整的结果是:["","","h","","i","","!","",""]

关于c# - 带有空组 "()"的正则表达式返回奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159771/

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