如果可能的话,请帮助我理解:
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)
从.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.MatchorMatch.NextMatch方法的调用未能找到匹配项,则返回Match.Value属性的值为String.Empty.
您可以删除第一个if,或者将其替换为String.Empty.
| 归档时间: |
|
| 查看次数: |
1367 次 |
| 最近记录: |