我有一个正则表达式,应该用\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, "~");
答案 0 :(得分:1)
使用此模式[\t\r\n\v\s](?!(([^"]*"){2})*[^"]*$)
并替换为~
Demo
答案 1 :(得分:1)
以下是两种不同的方法。
(1.
)否定前瞻
Regex.Replace(input, @"\s(?!(([^""]*""){2})*[^""]*$)", "~");
注意:在NET中,\s
本身匹配任何 Unicode分隔符,制表符,换行符,回车符,垂直制表符,换页符,下一行 < / p>
(2.
)匹配引号,然后进行替换:( 建议 ..)
Regex.Replace(input, @"""[^""]+""",
m => m.Value.Replace(' ', '~')
.Replace("\t", "~")
.Replace("\r", "~")
.Replace("\n", "~")
);