半复杂字符串替换

本文关键字:替换 字符串 复杂 | 更新日期: 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 + "]"));