2011-03-22 27 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*(\(.+?\)) 

公告使用的下列强制非侵略性模式。你必须在括号内至少有一个字符。