为什么我的RegEx.Replace不起作用? C#和RegEx

时间:2015-12-17 15:13:20

标签: c# regex string pattern-matching

我有以下RegEx.Replace:

Regex.Replace(line[k], "(?i)(?<!^)(?<!;)\"(?![\";])", "\"\"", RegexOptions.None);

line [k] =字符串[]

中的字符串

我想要它做的是用双引号(&#34;&#34;)替换所有引号(&#34;)但仅当引号不是字符串的开头且不在前面时或者跟着一个; 例如:

  

&#34;这是一个&#34;句子&#34;以引号开头&#34;;&#34;这是   另一句话是&#34;引用&#34;标记前面有一个; &#34;

应该是:

  

&#34;这是&#34;&#34;句子&#34;&#34;以引号开头&#34;;&#34;这是另一个带&#34;&#34;引用&#34;&#34;标记前面有一个; &#34;

我几乎从正则表达式构建器复制了正则表达式,并且在我工作之后它在那里工作,但现在在我的应用程序中它不再起作用了。我甚至在正则表达式构建器和我自己的应用程序中测试了相同的字符串。

1 个答案:

答案 0 :(得分:1)

据我所知,它按预期工作。这是一个基于您的示例的小LINQPad脚本:

Stream stream =rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);

我从2次运行得到的结果: var orignial = "This is a \"sentence\" that starts with a quotation mark\";\"This is another sentence with a \"quotation\" mark preceded by a ;"; var result = Regex.Replace(orignial, "(?i)(?<!^)(?<!;)\"(?![\";])", "\"\"", RegexOptions.None); Console.WriteLine(orignial); Console.WriteLine(result);

  

这是一个以引号“;”开头的“句子”   另一个带有“引号”标记的句子,前面带有一个;

Console.WriteLine(orignial);

  

这是一个以引号开头的“”句子“;”这是   另一句带有“”引号“”标记前面带有;

如果您正确格式化了原始字符串,它应该按预期工作。