繁体   English   中英

Regex.Split表现出奇怪的行为

[英]Regex.Split exhibiting strange behavior

我有一个正则表达式,我正在对另一个字符串进行拆分,我得到了奇怪的结果。

        string subjectString = "Triage|Follow Up|QA";
        string[] splitArray = null;
        try
        {
            splitArray = System.Text.RegularExpressions.Regex.Split(subjectString, @"(?<=(^|[^\\]))\|");

            foreach (var item in splitArray)
            {
                System.Diagnostics.Debug.Print(item);
            }
        }
        catch
        {
        }

正在印刷的物品是:

分诊
Ë
跟进
p
QA

正则表达式在RegexBuddy中正常运行,但在C#中则不行。 什么导致奇怪的行为? 解释为什么拆分功能按照它的方式起作用的额外要点。

您的后视断言中的分组(…)导致了此问题。 请尝试使用非捕获组:

@"(?<=(?:^|[^\\]))\|"

或者根本没有额外的分组:

@"(?<=^|[^\\])\|"

RegexBuddy尚未模拟.NET包含由Split()返回的数组中的捕获组匹配的文本的行为。 要在.NET中获得与RegexBuddy中相同的行为,请将所有捕获组(...)更改为非捕获组(?:...)或使用RegexOptions.ExplicitCapture将所有未命名组转换为非捕获组。

通过在返回的数组中包含捕获组,.NET的Split()函数可以包含正则表达式匹配的分隔符和数组中分隔符之间的文本。 使用正则表达式<[^>]+>拆分可以获得HTML标记之间的文本,而不使用HTML标记。 使用正则表达式(<[^>]+>)拆分可以获得包含HTML标记的HTML标记之间的文本。 (这些简单的正则表达式假设输入包含有效的HTML而没有任何HTML注释。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM