替换另一种模式中的模式

时间:2015-05-04 22:55:09

标签: c# regex

我希望能够替换换行符(实际上是删除),但只有它们存在于引号内。

下面的字符串应该删除以粗体显示的换行符,因为它们在引号内:

例如 - 这是目标字符串“而我 \ r \ n 想要删除某些”行“中断 \ r \ n ”但不是其他人\ r \ n。我能这样做吗?

请参阅下面的图片了解正则表达式模式。我可以隔离包含换行符的引号。

现在,我希望能够在这些匹配项中找到模式\r\n并替换它们,同时将\r\n留在引号之外。 enter image description here

1 个答案:

答案 0 :(得分:2)

您可以在C#中使用可变宽度环视:

(?<="[^"]*)\\r\\n(?=[^"]*")

请参阅RegexStorm.net上的demo regex101不支持.NET正则表达式)。

如果您想删除实际的空格,可以使用

(?<="[^"]*)[\r\n]+(?=[^"]*")

示例代码:

var rx = new Regex(@"(?<=""[^""]*)[\r\n]+(?=[^""]*"")");
var removed = rx.Replace("This is the target string \"and I \r\n want some\" line \"breaks \r\n\" to be removed but not others \r\n. Can I do that?", string.Empty);

输出(仅剩1个换行符):

This is the target string "and I  want some" line "breaks " to be removed but not others 
. Can I do that?