Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# String.Trim()是否可以删除正则表达式\S应该匹配的字符?_C#_Regex - Fatal编程技术网

C# String.Trim()是否可以删除正则表达式\S应该匹配的字符?

C# String.Trim()是否可以删除正则表达式\S应该匹配的字符?,c#,regex,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) {

请帮助我了解以下情况是否可行:

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?
    }
}

从.NET4.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);
        }
    }
}
运行此代码不会产生任何结果:
char.IsWhitespace
认为空白的26个字符中没有一个与正则表达式的
\S
匹配。因此,我必须得出这样的结论:
trimmedstring!=regexMatch.Value
条件不可访问

作为旁注,
regexMatch.Value
永远不能为
null

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


如果,您可以删除第一个
,或者将其替换为与
字符串的比较。空的

从.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);
        }
    }
}
运行此代码不会产生任何结果:
char.IsWhitespace
认为空白的26个字符中没有一个与正则表达式的
\S
匹配。因此,我必须得出这样的结论:
trimmedstring!=regexMatch.Value
条件不可访问

作为旁注,
regexMatch.Value
永远不能为
null

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


如果
,您可以删除第一个
,或者将其替换为与
字符串进行比较。空
您的代码有点可疑,但我将回答
字符串.Trim()
是否等同于使用
\s
删除前导空格和尾随空格的问题

它们与.NET Framework 4.0相当

  • 从.NET 4.0中,将删除使返回值为真的前导字符和尾随字符

    Char.IsWhitespace()
    根据文档中的描述,为中的字符以及
    \t
    \n
    \v
    \f
    \r
    \x85
    返回true

    请注意,似乎存在一些差异。据介绍,
    U+00A0不间断空格
    属于
    Zs
    类别,但MSDN没有将其放入
    Char.IsWhitespace()
    文档中的空格分隔符列表中。测试显示
    \s
    匹配
    U+00A0
    ,这意味着
    U+00A0
    \p{Z}
    类别中的字符之一

  • 根据该页面,
    \s
    相当于
    [\f\n\r\t\v\x85\p{Z}]
    Z
    类别目前由3个子类别组成:Zs、Zl、Zp

它们与.NET 4.0之前的版本不同

根据
String.Trim()
文档:

由于此更改,.NET Framework 3.5 SP1和早期版本中的修剪方法删除了两个字符,
零宽度空格(U+200B)
零宽度不间断空格(U+FEFF)
,而.NET Framework 4和更高版本中的修剪方法不会删除这两个字符

此外,.NET Framework 3.5 SP1和早期版本中的Trim方法不会修剪三个Unicode空白字符:
蒙古语元音分隔符(U+180E)
窄不间断空格(U+202F)
,以及
中等数学空格(U+205F)

简单地说,
String.Trim()
考虑在4.0之前的.NET版本中删除一组不同的字符


正则表达式中
\s
的规范与.NET 1.1中的规范相同。

您的代码有点可疑,但我将回答
String.Trim()
是否等同于使用
\s
删除前导和尾随空格的问题

它们与.NET Framework 4.0相当

  • 从.NET 4.0中,将删除使返回值为真的前导字符和尾随字符

    Char.IsWhitespace()
    根据文档中的描述,为中的字符以及
    \t
    \n
    \v
    \f
    \r
    \x85
    返回true

    请注意,似乎存在一些差异。据介绍,
    U+00A0不间断空格
    属于
    Zs
    类别,但MSDN没有将其放入
    Char.IsWhitespace()
    文档中的空格分隔符列表中。测试显示
    \s
    匹配
    U+00A0
    ,这意味着
    U+00A0
    \p{Z}
    类别中的字符之一

  • 根据该页面,
    \s
    相当于
    [\f\n\r\t\v\x85\p{Z}]
    Z
    类别目前由3个子类别组成:Zs、Zl、Zp

它们与.NET 4.0之前的版本不同

根据
String.Trim()
文档:

由于这一变化,.NETFramework 3.5SP1和早期版本中的Trim方法删除了两个字符,
零宽度空格(U+200B)<