我有一个正则表达式,我正在对另一个字符串进行拆分而且我得到了奇怪的结果。
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
质量保证
正则表达式在RegexBuddy中正常运行,但在C#中运行不正常。什么导致奇怪的行为?解释为什么拆分功能按照原样运行的额外要点。
答案 0 :(得分:5)
您的后视断言中的分组(…)
导致此问题。请尝试使用非捕获组:
@"(?<=(?:^|[^\\]))\|"
或根本没有其他分组:
@"(?<=^|[^\\])\|"
答案 1 :(得分:1)
RegexBuddy还没有模仿.NET在Split()
返回的数组中包含捕获组匹配的文本的行为。要在.NET中获得与RegexBuddy中相同的行为,请将所有捕获组(...)
更改为非捕获组(?:...)
或使用RegexOptions.ExplicitCapture
将所有未命名组转换为非捕获组
通过在返回的数组中包含捕获组,.NET的Split()
函数可以包含正则表达式匹配的分隔符和数组中分隔符之间的文本。使用正则表达式<[^>]+>
拆分可以获取HTML标记之间的文本,而不使用HTML标记。使用正则表达式(<[^>]+>)
拆分可以获取包含HTML标记的HTML标记之间的文本。 (这些简单的正则表达式假设输入包含有效的HTML而没有任何HTML注释。)