C#Regex.Match在\ s上抛出错误

时间:2017-12-25 05:06:48

标签: c# regex

我正在运行以下正则表达式

Regex.Match(x, "<([^\s]+)")

但是\ s显示错误&#34;未记录的转义序列&#34; 如果我这样做

Regex.Match(x, @"<([^\s]+)")

它仍然无法运作。

我想找到一个以&lt;开头的字符序列。然后任何角色直到找到一个空格或者>找到了。

编辑:

我正在编辑这个,有人发现它,并想知道解决方案。当我还在学习正则表达式时没有人告诉我有关逃避我的角色的事情。所需要的只是一个双重反斜杠来逃避特殊角色。

3 个答案:

答案 0 :(得分:1)

您需要提供转义序列 而不是使用 Regex.Match(x,@&#34;&lt;([^ \ s] +)&#34;)[单斜杠] 使用[Double Slash]来避免错误&#34;未记录的转义序列&#34; Regex.Match(x,@&#34;&lt;([^ \\ s] +)&#34;);

可能有帮助。如果您需要更多信息,请继续发布。

答案 1 :(得分:1)

需要提供转义序列@"<([^\s]+)"

string pattern = @"<([^\s]+)";
        string input = @"<sada >sffds</sada>";

        foreach (Match m in Regex.Matches(input, pattern))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }

答案 2 :(得分:0)

确实必须使用@""字符串(或者通过将它们加倍\\来逃避反斜杠本身,但这样做并不容易。)

反斜杠在字符串中具有非常特殊的含义(特殊的不可打印字符的转义序列,在任何正则表达式解释之前)。因此,您必须告诉C#编译器不要将退格解释为转义字符。

这个正则表达式可以解决这个问题:<([^\s>]+)

(匹配<然后捕获所有非空格或>

RegexStorm link

在字符串中:

  

abcdef <ghij klm nop qrs tu<vwxy>z

ghijvwxy是2个被捕获的群组。