1

我有这样的场景:

"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

4 回答 4

7

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

myString = myString.Replace(Environment.NewLine, "\"");
于 2013-04-26T11:24:38.070 回答
5

使用string.Replace像:

给你评论:

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

myString = myString.Replace(Environment.NewLine, "\"");
于 2013-04-26T11:24:21.617 回答
1

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

如果您使用非贪婪表达式,它可能会匹配几个字符。利用:

Match match = Regex.Match(myString, @""".*?""", RegexOptions.Singleline);
于 2013-04-26T11:32:08.253 回答
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"

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

于 2013-04-26T13:23:50.053 回答