【问题标题】:Regex replace problems with \\ [duplicate]正则表达式用 \\ 替换问题 [重复]
【发布时间】:2019-10-01 16:47:58
【问题描述】:

我创建了自己的正则表达式,除了反斜杠之外一切正常。我尝试了我的版本,但没有一个有帮助。

var regexItem = new Regex("[^A-Za-z0-9_.,&/*:;=+{}()'\"\\ -]+");
string temp2 = "";
while ((@line = file2.ReadLine()) != null)
{
    if (regexItem.IsMatch(line) && (line.Contains(".jpg") || line.Contains(".png") || line.Contains(".jpeg") || line.Contains(".svg")))
    {
        @temp2 = Regex.Replace(line, "[^A-Za-z0-9_.,&/\\*:;=+{}()'\" -]+", "");
        postki.WriteLine(@temp2);
        Console.WriteLine(@"{0} ==> {1}", @line, @temp2);
    }
    else
    {
        postki.WriteLine(@line);
    }
}

【问题讨论】:

  • 反斜杠是 正则表达式和 C# 中的特殊字符。如果要在模式中使用文字反斜杠,则需要在正则表达式和 C# 中对其进行转义。
  • 其实我看不懂。 :'D
  • 有时拉出需要转义的字符更容易:char doubleQuote = '"'; string s = "he said," + doubleQuote + "hello!" + doubleQuote;

标签: c# .net regex


【解决方案1】:

在c#字符串literals中,特殊字符(如")需要转义。 C# 使用 \ 转义这些字符。

例如 - 正如您已经做过的那样 - 包含 " 的字符串将被声明为:

string quote = "\"";

所以当然反斜杠本身也需要转义。所以包含反斜杠的字符串看起来像这样:

string backslash = "\\";

因此,literal 中有两个反斜杠,字符串中就有一个真正的反斜杠。

但反斜杠也是正则表达式中的特殊字符(也用于转义其他符号,例如,如果您的意思是文字 . 而不是 any-character-dot,则使用\.)。因此,要使用文字反斜杠(意味着匹配搜索字符串中的单个反斜杠),您需要在 c# 字符串文字中使用 4 个反斜杠:

string regexBackSlash = "\\\\";

在您的正则表达式中,您可能是指:

var regexItem = new Regex("[^A-Za-z0-9_.,&/*:;=+{}()'\"\\\\ -]+");
                                     // difference here ^

或者您可以使用逐字字符串文字(以 @ 开头):

var regexItem = new Regex(@"[^A-Za-z0-9_.,&/*:;=+{}()'""\\ -]+");

(但你需要再次转义")。

【讨论】:

    猜你喜欢
    • 2015-12-12
    • 2011-09-07
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多