如何忽略.NET中带引号的字符串中的文本。 我有以下字符串
This is test, 'this is test inside quote'
说我正在搜索test
并替换它应该只替换引号中不存在的test
。
This is, 'this is test inside quote'.
我用它来匹配引用文本中的文字。
(["']).*?\1
答案 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
组,它将在替换后保留,否则匹配的字符串将被删除。
答案 2 :(得分:0)
我会将这些引用的子串提取到List中(当然,如果你有超过1个引用),为以后创建占位符(%1,%2等),执行regexp,并用列表项替换占位符。
答案 3 :(得分:-1)
我可以在regEx中看到一个双引号和一个单引号。确保两者都是单引号。也许你需要逃避单引号。 ([\'\']).*?\1