2011-08-17 28 views
0

我有一個字符串等作爲folows:抓取值

"channel_changes":[[1313571300,26.879846,true],[1313571360,26.901025,true]] 

我想提取每串中的角撐等131357130026.879846true

通過正則表達式。

我一直在使用

string regexPattern = @"\[(.*?)\]"; 

試過但給人的第一字符串作爲[[1313571420,26.901025,true] 即有一個額外的角撐。

請幫我一下,我怎麼做到這一點。

回答

1

這似乎快報工作對我來說:

\[([\w,\.]*?)\] 

文字[
[1]:帶編號的捕獲組。 [\ W,] *?]
- 在這個類的任何字符:[\ W,...],任何重複次數,儘可能少
文字]

的問題似乎是「。」在你的正則表達式中 - 因爲它正在拾取第一個文字「[」,並且在你的輸入中考慮下面的「[」作爲下一個字符有效。

我將它限制爲僅包含字母數字字符,逗號和文字句號(句號),因爲這就是您示例中的所有內容。你可以走得更遠,真正指定這些內方括號內的數據的格式假設它的一致,並與更多的東西像這樣結束:

\[[0-9.]+,[0-9.]+,(true|false)\] 

實例C#代碼:

var matches = Regex.Matches("\"channel_changes\":[[1313571300,26.879846,true],[1313571360,26.901025,true]]", @"\[([\w,\.]*?)\]"); 

foreach (var match in matches) 
{ 
    Console.WriteLine(match); 
} 
+0

在.NET中,它返回5場比賽,其中三是逗號符號「」和第五是‘]’ – sll

+0

在.net – CuriousBuddy

+0

不工作工程在PowerShell中,不知道爲什麼不.NET? '[regex] :: matches(''channel_changes':[[1313571300,26.879846,true],[1313571360,26.901025,true]]','\ [([\ w,\。] *?)\]') ' –

0

嘗試:

@"\[+([^\]]+)\]+" 

「[^]] +」 - 這意味着除了右方括號

012的任何字符
0

試試這個

\[([^\[\]]*)\] 

見這裏online on Regexr

[^\[\]]*是一個否定的字符類,意味着匹配任何字符,但[]。有了這個構造,你不需要?就可以讓你的*不合理。