如何从双引号中删除换行符?

时间:2013-04-26 11:23:13

标签: c# regex

我有这样的场景:

"abcdef
 123sq
 gh"

应重新排列为“abcdef 123sq gh”。

为此,我使用正则表达式,它工作正常:

Match match = Regex.Match(myString, @""".*""", RegexOptions.Singleline);
if (match.Success) {
  myString= myString.Replace(match.Value, match.Value.Replace("\n", ""));
}

但这不适用于以下情况:

"abc" "def"
asdf123456
"abc"

在上面的例子中,它考虑了第一个和最后一个引号,它将3行作为一个返回。

4 个答案:

答案 0 :(得分:7)

您应该能够简单地用双引号替换新行:

myString = myString.Replace(Environment.NewLine, "\"");

答案 1 :(得分:5)

使用string.Replace之类的:

你评论:

  

但我想在双引号中替换新行

myString = myString.Replace(Environment.NewLine, "\"");

答案 2 :(得分:1)

您的代码与引号之间的任何字符匹配,但是是一个贪婪的表达式 - 即它匹配尽可能多的字符,这有时意味着匹配多行。

如果使用非贪婪的表达式,它将尽可能匹配几个字符。使用:

Match match = Regex.Match(myString, @""".*?""", RegexOptions.Singleline);

答案 3 :(得分:1)

var newstring = Regex.Replace(myString, 
                                @"\""[^\""]*?[\n\r]+[^\""]*?\""", 
                                m=>Regex.Replace(m.Value,@"[\n\r]",""));

这将转换

"abc" "d
 ef"
asdf123456
"ghi"

"abc" "d ef"
asdf123456
"ghi"

当然它也适用于您的样品。