2012-07-09 159 views
1

我試圖下面的字符串與正則表達式正則表達式來解析[A] [B]到A和B

[property1=text1][property2=text2] 

並分離成一個單獨的行所期望的結果應該是

property1=text1 
property2=text2 

這裏是我的代碼

string[] attrs = Regex.Split(attr_str, @"\[(.+)\]"); 

結果不正確,我可能做錯事

enter image description here

UPDATE:採取建議的答覆後。現在它顯示的空間與空字符串

enter image description here

+0

我們怎樣才能讓它只匹配[XXX]。字符串中沒有[]或[],爲什麼它匹配那些? – codingbiz 2012-07-09 16:23:38

回答

5

.+是一個貪婪的匹配,所以它吸引儘可能多的。

選其一

\[([^]]+)\] 

\[(.+?)\] 

在第一種情況下,匹配]是不允許的,所以 「儘可能」 變短。第二個使用非貪婪的匹配。

+0

我嘗試了兩種方法,但它匹配空格和空字符串。我們怎麼能告訴它只匹配[xxx]。在字符串中沒有[]或[],爲什麼它匹配那些 – codingbiz 2012-07-09 16:23:04

+0

@tcoder:那是因爲你正在使用'Regex.Split'。分隔符之間的東西確實是一個空字符串。改用'Match'。 – 2012-07-09 16:40:59

+0

這是我的不好。我想知道爲什麼我第一次工作。我只是交叉檢查它,它使用'.Matches'而不是'.Split'。謝謝 – codingbiz 2012-07-09 16:48:03

4

你的小點也抓住了大括號。您需要排除大括號:

\[([^]]+)\] 

[^]]匹配除了大括號外的任何字符。

2

嘗試添加 '懶' 說明:

Regex.Split(attr_str, @"\[(.+?)\]"); 
2

嘗試:

var s = "[property1=text1][property2=text2]"; 
var matches = Regex.Matches(s, @"\[(.+?)\]") 
    .Cast<Match>() 
    .Select(m => m.Groups[1].Value); 
相關問題