String.Trim()可以删除正则表达式\ S匹配的字符吗?

Use*_*ser 1 c# regex

如果可能的话,请帮助我理解:

var regexMatch = Regex.Match(inputString, "(\S*\d+\S*|\d)+");

if (regexMatch.Value == String.Empty)
{
    return null;
}
else
{
    var trimmedString = regexMatch.Value.Trim();

    if(trimmmedString != regexMatch.Value)
    {
        //Is there any value for inputString that makes this reachable?
    }
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 7

从.NET 4.0开始,Trim使用Char.IsWhiteSpace方法来决定修剪内容; 文档列出了要修剪的所有字符.由于文档\S并未说明它使用相同的字符列表,因此询问是否存在不匹配是一个公平的问题.

找出答案的一种方法是详尽的搜索:

var ws = new Regex("\\S");
for (char c = '\0'; c != 0xffff; c++) {
    if (char.IsWhiteSpace(c)) {
        var m = ws.Match("" + c);
        if (m.Value.Length != 0) {
            Console.Error.WriteLine("Found a mismatch: {0}", (int)c);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此代码不会产生任何结果:char.IsWhitespace认为空格的26个字符中没有一个\S与正则表达式匹配.因此,我必须得出结论,由trimmmedString != regexMatch.Value条件保护的代码是无法访问的.

作为旁注,regexMatch.Value永远不可能null:根据文档,

如果对Regex.Matchor Match.NextMatch方法的调用未能找到匹配项,则返回Match.Value属性的值为String.Empty.

您可以删除第一个if,或者将其替换为String.Empty.