半复杂字符串替换
本文关键字:替换 字符串 复杂 | 更新日期: 2023-09-27 18:26:50
>我有这个文字
'Random Text', 'a'nb''c''d''', 'ok'
我希望它成为
'Random Text', 'a'nb'c''d'', 'ok'
问题是逃避。我现在没有带着'
逃跑,而是只带着''
逃'
.这是针对第三方程序的,所以我无法更改它,因此需要将一种转义方法更改为另一种。
问题是'''
.如果我做字符串替换,它将变成'''
而不是''
。此外,'n
不是换行符,而是不应修改的实际文本'n
。我尝试使用正则表达式,但我想不出一种方法来说明'
是否用其他''
替换,如果''
替换为'
。显然,分两步执行此操作会产生问题。
如何正确替换此字符串?
如果我
正确理解您的问题,问题在于用'
替换''
,如果它发生在'
之前,可能会导致另一次替换。一种技术是先将其替换为中间字符串,您确定不会在其他任何地方发生,然后在完成后将其替换回来。
var str = @"'Random Text', 'a'nb''c''d''', 'ok'";
str.Replace(@"''", "NON_OCCURRING_TEMP")
.Replace(@"''", "''")
.Replace("NON_OCCURRING_TEMP", @"'");
正如@AlexeiLevenkov所指出的,您还可以使用Regex.Replace
同时进行这两种修改。
Regex.Replace(str, @"('''')|(''')",
match => match.Value == @"''" ? @"'" : @"''");
看来Voithos对这个问题的解释是正确的。另一种方法是使用正则表达式一次查找所有令牌并替换 ReguarExpression.Replace
起点:
var matches = new Regex(@"'''''|'''|'");
Console.Write(matches.Replace(@"'a b'nc d''e''f'''",
match =>"["+match + "]"));