2011-03-22 52 views
1

我有一個字符串「(測試版)(2011年2月27日)」正則表達式使用C#

限制打開和關閉括號僅第二次出現,我需要用C#來獲得打開和關閉支架的第二次出現

+0

你已經試過了嗎?如果是這樣,你可以發佈它嗎?或者你只是希望能夠用勺子餵食? :) – 2011-03-22 08:58:52

+2

大概不是一個公平的評論。這個傢伙已經回答了187個問題......但同意一些關於他卡住的地方的更多信息更好。 – 2011-03-22 09:01:42

+1

@Stephan,請注意,我在它後面放了一個笑臉,所以它並不像它聽起來對你(或其他人)聽起來那麼苛刻。我只是覺得這個問題沒有被問到,因爲它應該是這樣的:例如,沒有問號可以在任何地方看到,「我需要」的一部分對我來說聽起來有點苛刻,而且他/她已經試圖解決的問題還不清楚。還有缺乏細節:我現在可以簡單地回答一些問題,比如:'s.substring(7)'(僞代碼),這會產生所需的結果。 – 2011-03-22 09:13:50

回答

4

它可能比較容易匹配所有(...)令牌,並採取第二:

MatchCollection matches = Regex.Matches(str, @"\(([^)]*)\)"); 

獲得的第二場比賽:

String second = matches[1].Groups[1].Value; 

正則表達式假設有效對括號,並沒有嵌套。這是非常基本的:

  • \( - 開幕。
  • (...) - 捕獲組,輕鬆提取值。
  • [^)]* - 組內容 - 不是(的字符。
  • \) - 結束。
+0

感謝這看起來比我原來的更時髦 – abmv 2011-03-22 09:23:51

+0

你需要小心輸入如:(BETA(1))(...)或任何東西包含嵌套的括號。 – 2011-03-22 09:43:02

+0

@Stephen - 注意強制性的「正則表達式假定有效的括號對,並且沒有嵌套」註釋':)'。在.Net正則表達式中有很多方法可以解決這個問題,但我不認爲有必要將這個問題複雜化,至少在OP請求它之前。匹配一個平衡的令牌並不難,但它要複雜得多。小插頭:http://kobikobi.wordpress.com/2010/12/14/net-regex-matching-mixed-balanced-parentheses/ – Kobi 2011-03-22 09:52:35

2

你想要它在正則表達式嗎?如果不是正則表達式:

int n = text.indexOf("("); 
if (n >= 0) { 
    n = text.indexOf("(", n+1); 
} 

正則表達式: 「?」

\(.+?\)\s*(\(.+?\)) 

公告使用的下列強制非侵略性模式。你必須在括號內至少有一個字符。