如何在一行代码中转义所有需要转义的字符?

B. *_*non 5 c# regex string escaping stringescapeutils

根据我在这里看到的内容(可接受的答案),看来我可以通过执行以下操作来转义字符串:

string s = "Woolworth's";
string t = Regex.Escape(s);
MessageBox.Show(t);
Run Code Online (Sandbox Code Playgroud)

...但逐步了解,我发现s和t之间没有区别(我希望我将两个变量都用“ Woolworth's”作为t的值,而不是“ Woolworth's”)。

我猜我可以做这样的事情:

    string s = "Woolworth's";
    s = s.Replace("'", "\'");

...etc., also escaping the following: [, ^, $, ., |, ?, *, +, (, ), and \
Run Code Online (Sandbox Code Playgroud)

...但是“一站式购物”解决方案是更可取的。

更具体地说,我需要用户输入的字符串作为Android arrays.xml文件中的字符串值可以接受。

例如,它对此感到窒息:

<item>Woolworth's</item>
Run Code Online (Sandbox Code Playgroud)

...必须是这样的:

<item>Woolworth\'s</item>
Run Code Online (Sandbox Code Playgroud)

Sam*_*Sam 5

Regex.Escape() 仅转义正则表达式保留字符:

通过用转义码替换字符,来转义最少的字符集(\,*,+,?,|,{,[,(,),^,$,。,#和空白)。这指示正则表达式引擎按字面意义而不是元字符来解释这些字符。


匹配/捕获要转义的字符的字符类(请注意,某些字符在字符类中具有特殊含义,需要像\和一样转义-):

(['^$.|?*+()\\])
Run Code Online (Sandbox Code Playgroud)

然后将其替换为反斜杠和对要转义的字符的引用:

\\1
Run Code Online (Sandbox Code Playgroud)

演示版


在C#中:

string s = "Woolworth's";
Regex rgx = new Regex("(['^$.|?*+()\\\\])");

string t = rgx.Replace(s, "\\$1");
// Woolworth\'s
Run Code Online (Sandbox Code Playgroud)

演示版