替换引号内的所有格式字符
本文关键字:所有格 有格式 字符 替换 | 更新日期: 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", "~") );
实时演示