2012-02-03 3 views
6

Я получил этот код ниже, который работает для одинарных кавычек. находит все слова между одинарными кавычками. но как я могу изменить регулярное выражение для работы с двойными кавычками?Regex.Matches C# двойные кавычки

ключевых слова исходят от формы поста

так

keywords = 'peace "this world" would be "and then" some' 


    // Match all quoted fields 
    MatchCollection col = Regex.Matches(keywords, @"'(.*?)'"); 

    // Copy groups to a string[] array 
    string[] fields = new string[col.Count]; 
    for (int i = 0; i < fields.Length; i++) 
    { 
     fields[i] = col[i].Groups[1].Value; // (Index 1 is the first group) 
    }// Match all quoted fields 
    MatchCollection col = Regex.Matches(keywords, @"'(.*?)'"); 

    // Copy groups to a string[] array 
    string[] fields = new string[col.Count]; 
    for (int i = 0; i < fields.Length; i++) 
    { 
     fields[i] = col[i].Groups[1].Value; // (Index 1 is the first group) 
    } 
+0

Не было бы работать, чтобы поставить кавычки в строке? @ -strings используют «" вместо \ "для цитат.' @ "" "(. *?)" "" ' –

ответ

13

Вы бы просто заменить ' с \" и удалить буквальный восстановить его должным образом.

MatchCollection col = Regex.Matches(keywords, "\\\"(.*?)\\\""); 
+0

Не нужно скрывать' '' в regex. –

+0

префектура. и если бы я хотел включить кавычки в строку? – user713813

+0

@ user713813: Переместите скобки (а также метку _nongreedy_) к соответствующим концам строки. – Nuffin

8

То же самое, но с двойными кавычками вместо одинарных кавычек. Двойные кавычки не являются особыми в шаблоне регулярных выражений. Но я обычно добавляю что-то, чтобы убедиться, что я не охватывает accross нескольких строк в кавычках в одной игре, а также для размещения двойной двойные кавычки ускользает:

string pattern = @"""([^""]|"""")*"""; 
// or (same thing): 
string pattern = "\"(^\"|\"\")*\""; 

Что переводится символьной строки

"(^"|"")*" 
3

Используйте это регулярное выражение:

"(.*?)" 

или

"([^"]*)" 

В C#:

var pattern = "\"(.*?)\""; 

или

var pattern = "\"([^\"]*)\""; 
2

Вы хотите, чтобы соответствовать " или '?

в этом случае вы можете захотеть сделать что-то вроде этого:

[Test] 
public void Test() 
{ 
    string input = "peace \"this world\" would be 'and then' some"; 
    MatchCollection matches = Regex.Matches(input, @"(?<=([\'\""])).*?(?=\1)"); 
    Assert.AreEqual("this world", matches[0].Value); 
    Assert.AreEqual("and then", matches[1].Value); 
} 
Смежные вопросы