2013-04-26 3 views
1

У меня есть сценарий, как это:Как удалить символы новой строки из двойных кавычек?

"abcdef 
123sq 
gh" 

должны быть перестроены, как "ABCDEF 123sq Г.Х.".

Для этого я использовал регулярные выражения, и это работает прекрасно:

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

Чтобы быть полным: что должно произойти с символами новой строки _outside_ в цитируемой части? Другими словами, являются ли соответствующие цитаты? –

+1

Вам нужно быть «не жадным» в вашем регулярном выражении. Используйте '@" "". *? "" "Вместо этого, чтобы соответствовать любому символу (как можно меньше) – Grhm

ответ

1

Ваш код соответствует любому символу между кавычками, но является жадным выражением - то есть он соответствует как можно большему числу символов, что иногда означает соответствие нескольких строк.

Если вы используете не-жадное выражение, оно будет соответствовать нескольким символам. Использование:

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

Использование string.Replace нравится:

Для Вас комментарий:

Но я хочу, чтобы заменить новую строку в двойных кавычках

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

Вы должны быть в состоянии просто заменить новый линии с двойной ценой:

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

Но я хочу заменить новую строку в двойных кавычках – Gun

+0

@yug - Ответ обновлен. – Oded

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" 

, конечно, это работает для вашего образца тоже.

Смежные вопросы