2012-07-08 48 views
0

我有一個文本,其中包括這樣的:如何使用正則表達式在引號中查找字符串?

"id": "100001470360923", 
    "name": "Đặng Minh Khiêm", 
    "first_name": "Đặng Minh", 
    "last_name": "Khiêm", 
    "link": "https://www.facebook.com/mrkhiem97", 
    "username": "mrkhiem97", 
    "birthday": "10/09/1992", 
    "location": { 
      "id": "108458769184495", 
      "name": "Ho Chi Minh City, Vietnam" 
     }, 

我想使用正則表達式在C#中拿到2串: 「ID」: 「100001470360923」 「名」: 「Đặng胡志明市范家謙」

 String patternID = "\"id\":\"\\d+\""; 
     String patternName = "\"name\":\"[\\w]+\""; 
     Match matchID = Regex.Match(data, patternID); 
     Match matchName = Regex.Match(data, patternName); 

不過,這並不與patternName

我不知道如何使用模式的工作原理。有人可以給我這樣的模式嗎?

+0

相關[問題](http://stackoverflow.com/questions/10324279/how-to-match-double-quote-or-single-quote-or-unquoted -with-正則表達式?RQ = 1)。 – 3aw5TZetdf 2012-07-08 03:57:24

+0

[RegEx Cheat Sheet](http://regexlib.com/CheatSheet.aspx?AspxAutoDetectCookieSupport=1) - 使用此工具不難學習http://www.radsoftware.com.au/regexdesigner/ – 2012-07-08 04:13:24

+0

This look像JSON。爲什麼不正確解析JSON而不是用正則表達式寫一個片狀解決方案? – nhahtdh 2012-07-08 05:28:15

回答

1

您的正則表達式不起作用,因爲您的名稱中包含非單詞字符(如空格)。您可以使用[^\"]+來匹配任何不是報價的內容。這裏有一個完整的例子:

String data = "\"id\": \"100001470360923\", \"name\": \"Ð?ng Minh Khiêm\", \"first_name\": \"Ð?ng Minh\", \"last_name\": \"Khiêm\", \"link\": \"https://www.facebook.com/mrkhiem97\", \"username\": \"mrkhiem97\", \"birthday\": \"10/09/1992\", \"location\": { \"id\": \"108458769184495\", \"name\": \"Ho Chi Minh City, Vietnam\" },"; 
String patternID = "\"id\": \"[^\\\"]+\""; 
String patternName = "\"name\": \"[^\\\"]+\""; 
Match matchID = Regex.Match(data, patternID); 
Match matchName = Regex.Match(data, patternName); 

Console.WriteLine(matchID.Value); 
Console.WriteLine(matchName.Value); 

此輸出:

"id": "100001470360923" 
"name": "Ð?ng Minh Khiêm" 

當然,如果這是一些其他的格式(它看起來非常相似,JSON),它會更容易讓你使用一個庫,旨在解析該格式。看看DataContractJsonSerializer或類似的課程。

+0

[^ \\\「] + 我對此不甚瞭解,您能否更清楚地解釋一下? 謝謝 – user1489472 2012-07-08 06:18:24

+0

@ user1489472:除\和」之外的任何字符。 – nhahtdh 2012-07-08 12:25:39

0

試試這個:

var pattern = "\"id\":\\s*\"(?<id>[^\"]*)\"\\s*,\\s*\"name\"\\s*:\\s*\"(?<name>[^\"]*)\""; 
var match = Regex.Match(strInput, pattern); 
var id = match.Groups["id"].Value; 
var name = match.Groups["name"].Value; 
相關問題