2013-05-02 48 views
0

我想制作一个正则表达式模式,我想制作一个模式来获取括号内的值,我试过这个但不工作。我想用正则表达式来制作一个模式

String input = "(3+4)+5*4"; 
Match m = Regex.Match(input, @"([(0-9\/\+\-\*0-9)])"); 
if (m.Success) 
{ 
    String value = m.Groups[1].ToString(); 
    MessageBox.Show(value); 
} 
+10

不是简单地说“它不工作”,而是描述您的预期和实际结果。 – 2013-05-02 20:26:01

+0

好的,我会确保下次再做,谢谢你的建议:)。 – 2013-05-02 21:45:05

回答

2

你正在做的是错误理解一个“类”在正则表达式中做了什么。

[] - Denotes a set of characters to match. This is NOT a pattern. 

你需要抓住的是这种模式,你确实有几乎正确的模式。

(\([0-9][\/\+\-\*][0-9]\)) 

Capture: 
    Open Parenthesis 
    Any character in [0-9] 
    Any Character in [\/\+\*\-] 
    Any Character in [0-9] 
    Close Parenthesis 

尽管这只允许一位数字。如果你有任何多位数字,甚至10 ...这不会工作。现在,如果你把它改成这样的:

(\([0-9]+[\/\+\-\*][0-9]+\)) 

那些+告诉正则表达式来捕获一个或多个。这将允许任何数字,而不只是一个数字。

+0

它的工作原理非常感谢你的帮助,并感谢你让我理解了一些我不了解的东西。 – 2013-05-02 21:02:32

1

这可能是你正在寻找的模式:

"\(([0-9]+.?[0-9])\)S*" 

你可能已经忘记了括号,括号和“+”是特殊字符。尝试Regex Planet或其他正则表达式测试人员修改您要查找的模式。

1

为了帮助您进一步查看一些这些网站。一个非常有用的网站是regexlib;他们有一个正规表达式的大型图书馆。他们也有一个RegEx tester。另外还有一个非常有用的RegEx工具here