C# Regex 替换每行中第一次和最后一次出现的双引号

标签 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. 我在电影中遇见了安尼尔卡普尔、玛尼莎柯伊拉腊等Jackie Shroff。Le long m\u00e9trage est un succ\u00e8s moyen au 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 罗拉赫g\u0142\u00f3wnych Anil Kapoor i Manisha Koirala', w d​​rugoplanowych Jackie Shroff, Anupam Kher, Danny Denzongpa i Pran. Film by\u0142 hitem jako musical. Premiera jego odby\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(匹配匹配) { bool first = match.Index == 1; bool last = match.NextMatch().Index == 0; 如果(第一个 || 最后一个) 返回 ”\”\”\””; 别的 返回匹配值; }, RegexOptions.Compiled | RegexOptions.Multiline);

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

最佳答案

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

以下是您可以执行此操作的方法:

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

关于C# Regex 替换每行中第一次和最后一次出现的双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27088889/

相关文章:

c# - 取消选择 RowDetailsTemplate 后调整数据网格高度

C#检查进程是否存在然后关闭它

c# - 我们能否在 C# 中重载 Point 对象以使其支持 double ?

c# - 带条件重复的正则表达式

c# - 使用 StreamWriter 作为参数之一对 void 方法进行单元测试

c# - 如何添加wsse :Security header

php - 如何编写将纯文本转换为可点击链接的函数,其中文本包含 5 种类型的 URL

Javascript:突出显示子字符串,保留原始大小写,但在不区分大小写的模式下搜索

c# - 通用方法将委托(delegate)传递给方法?

python - 正则表达式匹配第一个和最后一个单词或任何单词