2016-09-17 18 views
0

我在下面的表單中有一個字符串 - 對於小提琴see here正則表達式匹配一個字符串,但只通過分組引起其中的一部分

{[(0.3; 0.43)(10; 8.2)(0; 0)(0.7888; 12.345)]:8.56/13.9}

我想僅篩選中的座標括號。因此,我設置的匹配模式識別出一對括號(用於轉義分組的兩個反斜槓)。然後,它創建一個組,其內部具有最少的一組字符,只要用分號分隔並用圓括號括起來即可。根據調試器我有四個匹配,這表明它是正確的。但是,當我訪問分組時,我看到兩個元素 - 一個包含一對括號和一個沒有。

Regex regex = new Regex("\\((.*?;.*?)\\)"); 
string full = regex.Matches(figure.ToString())[0].Value; 
string with = regex.Matches(figure.ToString())[0].Groups[0].Value; 
string sans = regex.Matches(figure.ToString())[0].Groups[1].Value; 

我不能完全確定,其中第一組(組[0])從獲取信息。我懷疑我沒有足夠好地表達正則表達式,並且它實際上對逃脫的括號做出了反應,就好像它是一個分組一樣。我懷疑是對的嗎?我應該如何重新表達這個表達?

回答

2

https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match.groups(v=vs.110).aspx

如果正則表達式引擎可以找到一個匹配,由組屬性返回的GroupCollection對象(索引0處的元件)的所述第一元件包含整個相匹配的字符串正則表達式模式。

所以Groups[0]具有你匹配整個值(例如(1;2)),而Groups[1]是第一子組相匹配(例如1;2)。

+0

這太出人意料了,令人困惑......我在你的鏈接上看到了文檔,但仍然存在。那是什麼目的?也許我不理解這種方式有用嗎? –

0

括號內的任何內容都被視爲一個組。如果你不希望組中的比賽被認爲是不,你應該使用前綴「:」

(?:正則表達式)

將導致集團被忽視的一個結果,但仍然匹配針對

+0

不完全確定這與我的問題有何關係。請介紹一下,以便我能夠理解預期的要點? –

相關問題