C#Regex替换每行中第一个和最后一个双引号

时间:2014-11-23 12:23:36

标签: c# .net regex

有一个带有未转义双引号的多行字符串,可防止对字符串进行解析。

字符串示例:

ns:common.topic.description "1942: A Love Story est un film indien r\u00e9alis\u00e9 par Vidhu Vinod Chopra sorti en salles le 15 juillet 1994. Il met en vedette Anil Kapoor, Manisha Koirala et Jackie Shroff. Le long m\u00e9trage est un succ\u00e8s moyen au box-office mais lance la carri\u00e8re de Manisha Koirala."@fr; ns:common.topic.description "1942: A Love Story to bollywoodzki dramat mi\u0142osny i film akcji zrealizowany w 1993 roku przez Vidhu Vinod Chopra, autora takich film\u00f3w jak Misja w Kaszmirze, czy Eklavya: The Royal Guard. W rolach g\u0142\u00f3wnych Anil Kapoor i Manisha Koirala', w drugoplanowych Jackie Shroff, Anupam Kher, Danny Denzongpa i Pran. Film by\u0142 hitem jako musical. Premiera jego odby\u0142a si\u0119 ju\u017c po \u015bmierci nagrodzonego potem kompozytora weterana Bollywoodu Rahul Dev Burman. To historia mi\u0142osna. Jej t\u0142em jest rok 1942, w kt\u00f3rym Gandhi has\u0142em "Quit India!" wezwa\u0142 Anglik\u00f3w do odej\u015bcia z kraju po 200-letniej okupacji. Syn s\u0142u\u017c\u0105cego Anglikom Indusa zakochuje si\u0119 w c\u00f3rce bojownika o wolno\u015b\u0107 kraju."@pl;

我已尝试使用此代码替换字符串每一行中"的第一次和最后一次出现(代码很糟糕但不起作用,只是不要这样做知道做其他事情的其他方式):

var freebaseFixedRdfString = Regex.Replace(freebaseFixedRdfString, "\"", delegate(Match match) { bool first = match.Index == 1; bool last = match.NextMatch().Index == 0; if (first || last) return "\"\"\""; else return match.Value; }, RegexOptions.Compiled | RegexOptions.Multiline);

如何使用正则表达式替换要替换为"的第一个和最后一个"""

2 个答案:

答案 0 :(得分:2)

如果要替换初始位置或最后位置的引号,则不需要正则表达式。但是,在您的示例中,引号不在文本行的初始位置或最后位置。

以下是如何执行此操作的方法:

var res = Regex.Replace(text, "(?<=^[^\"]*)\"|\"(?=[^\"]*$)", "\"\"\"");

正则表达式使用lookahead and lookbehind构造来替换

时的引用
  • 行的开头与此引号之间没有其他引号,或
  • 此行和行尾之间没有其他引号。

Demo.

var text = "Quick \"brown fox jumps \"over\" the lazy\" dog";
var res = Regex.Replace(text, "(?<=^[^\"]*)\"|\"(?=[^\"]*$)", "\"\"\"");

转换

Quick "brown fox jumps "over" the lazy" dog

Quick """brown fox jumps "over" the lazy""" dog

答案 1 :(得分:1)

^"|"$

您可以使用它来替换第一个和最后一个"。请参阅演示。

http://regex101.com/r/yP3iB0/7