RegEx忽略.net中引用字符串内的文本

时间:2011-07-12 21:12:30

标签: .net regex quotes

如何忽略.NET中带引号的字符串中的文本。 我有以下字符串

This is test, 'this is test inside quote'

说我正在搜索test并替换它应该只替换引号中不存在的test

This is, 'this is test inside quote'. 

我用它来匹配引用文本中的文字。

(["']).*?\1

4 个答案:

答案 0 :(得分:5)

我会使用Regex.Replace()。正则表达式将匹配未引用的字符串,后跟带引号的字符串,匹配评估程序将替换未引用的部分中的test。像这样:

Regex.Replace("This is test, 'this is test inside quote' test",
              @"(.*?)((?<quote>[""']).*?\k<quote>|$)",
              m => m.Groups[1].Value.Replace("test", "") + m.Groups[2].Value)

组1是未引用的部分,组2是引用的部分(或字符串的结尾)。以上结果是:

This is , 'this is test inside quote' 

答案 1 :(得分:3)

您可以使用以下模式跳过引用的字符串:

s = Regex.Replace(s, @"test|(([""']).*?\2)", "$1");

在字符串的每个字符上,模式可以匹配字符串"test",匹配并捕获带引号的字符串,或者失败。如果它捕获了$1组,它将在替换后保留,否则匹配的字符串将被删除。

工作示例:http://ideone.com/jZdMy

答案 2 :(得分:0)

我会将这些引用的子串提取到List中(当然,如果你有超过1个引用),为以后创建占位符(%1,%2等),执行regexp,并用列表项替换占位符。

答案 3 :(得分:-1)

我可以在regEx中看到一个双引号和一个单引号。确保两者都是单引号。也许你需要逃避单引号。 ([\'\']).*?\1