【问题标题】:C# Regex.Match throwing error on \s [duplicate]C#Regex.Match在\ s上抛出错误[重复]
【发布时间】:2018-06-06 13:03:17
【问题描述】:

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

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

但 \s 显示错误“无法识别的转义序列” 如果我这样做

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

还是不行。

我想查找以 。

编辑:

我正在编辑这篇文章,以防有人找到它并想​​知道解决方案。那是在我还在学习 Regex 的时候,没有人告诉我关于逃避我的角色的事情。所需要的只是一个双反斜杠来转义特殊字符。

【问题讨论】:

  • 我看不到正则表达式中的“>”符号在哪里
  • 这就是我最终需要的。现在我只是想让 \s 工作。
  • 在 \s 之前添加一个额外的反斜杠
  • 你用了什么输入法?正则表达式匹配什么?你期望它匹配什么?
  • 我正在遍历一个字符串数组

标签: c# regex


【解决方案1】:

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

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

这个正则表达式应该可以解决问题:&lt;([^\s&gt;]+)

(匹配&lt;,然后捕获不是空格或&gt; 的所有内容)

RegexStorm link

在字符串中:

abcdef &lt;ghij klm nop qrs tu&lt;vwxy&gt;z

ghijvwxy 是 2 个捕获的组。

【讨论】:

  • 我不知道为什么人们对此投了反对票,您提供的信息非常丰富。感谢您的帮助
【解决方案2】:

您需要提供转义序列 而不是使用 Regex.Match(x, @"

这可能会有所帮助。如果您需要有关它的更多信息,请随时发布。

【讨论】:

    【解决方案3】:

    需要提供转义序列@"&lt;([^\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);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      相关资源
      最近更新 更多