C# 正则表达式转义和替换

Posted

技术标签:

【中文标题】C# 正则表达式转义和替换【英文标题】:C# Regex escape and replace 【发布时间】:2019-07-31 15:05:00 【问题描述】:

我有一个将文档发送到电子邮件的 API。我正在使用一个允许我指定电子邮件的参数。它要求换行符为 Json 格式 (\n)。我正在使用正则表达式来转义文本框文本,如下所示。

string JsonMessage = string.Format("0\n1", System.Text.RegularExpressions.Regex.Escape(this.txtMailMessage.Text), System.Text.RegularExpressions.Regex.Escape(this.txtMailMessage.Text));
        JsonMessage = JsonMessage.Replace("\r", "");
        Console.WriteLine(JsonMessage);

这是一个示例输出:5\r\n5\r\n5

如图所示,我正在尝试替换 \r 以实现 Json 中的“换行符”。所以它看起来像这样:5\n5\n5

我似乎无法理解的是,当我投射 JsonMessage = JsonMessage.Replace("\r", ""); 时,它不会替换 \r

【问题讨论】:

试试JsonMessage.Replace("\\r", ""); 在尝试替换之前将 JsonMessage 字符串 输出到控制台。请注意,如果您在输出中看到字面上的 \r - 我的意思是字面上的反斜杠后跟一个 r -,那么您的 JsonMessage 中没有任何“\r”。 "\r" 是一个只有一个字符的字符串;该字符是 CR(回车)。此字符不可见,因此在控制台输出中看到 \r 将证明您的 JsonMessage 中没有 "\r",而是 "\\r" @G5W 谢谢你成功了! 【参考方案1】:

您需要使用JsonMessage.Replace("\\r", "");\\ 将被解释为单个反斜杠。

【讨论】:

【参考方案2】:

不要尝试用“\n”替换“\r\n”,而不是用任何内容替换“\r\n”

        string mystring = "5\r\n5\r\n5";
        mystring = mystring.Replace("\r\n", "\n");

这将产生“5\n5\n5”

【讨论】:

以上是关于C# 正则表达式转义和替换的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - C# 替换 SQL 通配符

C# 正则表达式

C#--正则表达式

Python 正则表达式转义运算符 \ 在替换和原始字符串中

python 正则表达式参数替换

转义正则表达式字符串