我有这样的场景:
"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行作为一个返回。
答案 0 :(得分:7)
您应该能够简单地用双引号替换新行:
myString = myString.Replace(Environment.NewLine, "\"");
答案 1 :(得分:5)
答案 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"
当然它也适用于您的样品。