2013-01-18 18 views
0

我有一個非常大的字符串str以下數據:正則表達式,直到一個特定的詞

"RewrittenQuery: Word:(\"state\" \"states\" \"state s\") Word:(\"library\" \"libraries\" \"libr\" \"lib\" \"lbry\") adjust:1feature:#:\" _MetaTag_Category 11265\"\r\n" 

我想從RewrittenQuery開始,直到之前adjust一切。 我寫了下面的代碼:

Match extraction = Regex.Match(str, @"RewrittenQuery:[^\n\r]+");  

上面的代碼能夠從RewrittenQuery提取的起點,但我不需要從數據(包括)adjust 我應該怎麼添加上述正則表達式來獲得我想要的數據?

+2

請確保輸入出現在這裏*正是因爲你擁有它*。沒有額外的引號,也沒有額外的轉義。 – Tomalak

回答

0

試試這個,請

static void TestRegEx() 
{ 
    string input = "sdsafff RewrittenQuery 1sdfs se1adjust wer aasdfsd"; 

    Match m = Regex.Match(input, @"RewrittenQuery(?<A1>.*)adjust"); 
    if (m.Success) 
     Console.WriteLine(m.Groups["A1"]); 
    else 
     Console.WriteLine("Didn't match"); 
} 

打印1sdfs se1

正則表達式是RewrittenQuery(?<A1>.*)adjust。部分(?<A1>.*)將採用任何符號並將它們放在名稱爲A1的組中,因此如果輸入字符串匹配,則可以按名稱匹配按組匹配該組中的值。

0

如果最終錨adjust:你可以使用下面的代碼:

string pattern = @"(?<Value>RewrittenQuery:[^\n\r]+\s)(?:adjust:)"; 
RegexOptions regexOptions = RegexOptions.IgnoreCase | RegexOptions.Multiline; 
Regex regex = new Regex(pattern, regexOptions); 
string targetString = @"RewrittenQuery: Word:(\""state\"" \""states\"" \""state s\"") Word:(\""library\"" \""libraries\"" \""libr\"" \""lib\"" \""lbry\"") adjust:1feature:#:\"" _MetaTag_Category 11265\""\r\n"; 

foreach (Match match in regex.Matches(targetString)) 
{ 
    if (match.Success) 
    { 
     var value = match.Groups["Value"]; 
    } 
} 
相關問題