替换引号内的所有格式字符

本文关键字:所有格 有格式 字符 替换 | 更新日期: 2023-09-27 18:08:20

我有一个正则表达式,它应该用~字符替换所有格式字符('t, 'r', 'n, 'v, whitespace(,如果这些格式字符出现在两个引号("(之间。

我的代码没有产生所需的结果,而是将第一个引号替换为~,然后留下其余的。我的正则表达式出了什么问题,如何使它达到所需的效果

对于以下字符串:name "Right 'r'nCurb"
结果应该是:name "Right~~~Curb"
但我的代码正在生成:name ~Right 'r'nCurb"

我的代码:

const string delimeters = "('"*[''t''r''n''v''b''s]'")";
var openBrkRgx = new Regex(delimeters);
line = openBrkRgx.Replace(line, "~");

替换引号内的所有格式字符

使用此模式['t'r'n'v's](?!(([^"]*"){2})*[^"]*$)
并替换为~
演示

这里有两种不同的方法。

  • (1.(负前瞻

    Regex.Replace(input, @"'s(?!(([^""]*""){2})*[^""]*$)", "~");
    

    注意:在NET中,'s本身匹配任何Unicode分隔符、制表符、换行符、回车符、垂直制表符、表单换行符、下一行

    实时演示

  • (2.(匹配报价,然后进行替换:(建议..(

    Regex.Replace(input, @"""[^""]+""", 
                  m => m.Value.Replace(' ',  '~')
                              .Replace("'t", "~")
                              .Replace("'r", "~")
                              .Replace("'n", "~")
                  );
    

    实时演示