正则表达式通过忽略“已替换的单引号”和“开头/结尾的单引号”来替换单引号

时间:2019-04-19 07:25:42

标签: c# regex string

我有一个像这样的字符串:

 var path = "'Ah'This is  a 'sample\'e'";

在上面的字符串中,单引号的开头和结尾(双引号之后)与预期的一样。 即"'...............'"; 在字符串的其余部分中,有单引号(被替换(即\'和未替换)。无论是否被替换,我都必须替换单引号。如果已经被转义,则无需执行任何操作)我很难找到合适的正则表达式来代替它。 替换后的字符串必须看起来像这样(请注意,开头和结尾的单引号不能替换。

"'Ah\'This is  a \'sample\'e'";

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您可以使用

s = Regex.Replace(s, @"(?<!\\)(?!^)'(?!$)", @"\'");

请参见regex demo。正则表达式图:

enter image description here

详细信息

  • (?<!\\)-与字符串中没有紧跟\的位置相匹配的负向后搜索
  • (?!^)-与字符串中没有立即跟在字符串开头的位置匹配的否定超前查询(如果当前位置是字符串的开头,则匹配失败)
  • '-一个'字符
  • (?!$)-与字符串中不立即跟在字符串末尾的位置匹配的否定前瞻(如果当前位置是字符串的末尾,则匹配失败)。