2014-10-20 21 views
1

我想从输入字符串中获取某个“框架”中的子字符串。我们来看一个例子。如何从正则表达式中定义的输入字符串中获取字符串

我有以下输入文件:

Method(M123426)(123) 
Method(M123427)(Zeno) 
Method(M123428)(true) 
Method(M123429)(444) 

我想从第一次出现的获取值:M123426,123 所以框架会是这样:“法()()”和我需要括号中的值。

我创建了这个正则表达式:

Match method = Regex.Match(inputString, @"METHOD(.+\)\(.+\)"); 

但这样会导致匹配的框架本身,以及而我只需要值。我怎样才能做到这一点?

+0

如果你的例子代表了所有的可能性,你应该能够使用,而不是一个正则表达式'string.Split'做到这一点。 – juharr 2014-10-20 13:07:13

+0

这只是一个例子。我在这里用“M123426”和“123”代替的字符串可能非常复杂。 – 2014-10-20 13:57:31

回答

2

试试这个:

^Method\((.*?)\)\((.*?)\) 

Regexr:http://regexr.com/39ot8

确保启用Singleline模式。

您需要拉第一个和第二个捕获组以获取所需的信息。

+0

这看起来不错,但为什么我需要问号? – 2014-10-20 13:59:50

+0

'*?'表示“匹配前一个字符零次或多次,但尽可能匹配尽可能少的字符。” [参考](http://msdn.microsoft.com/en-us/library/az24scfc(v = vs.110).aspx#quantifiers)示例:在'hello world'中,表达式'he。* o'匹配'hello wo',但'he。*?o'匹配'hello'。 – qJake 2014-10-20 14:29:09

+0

太棒了!谢谢。 – 2014-10-20 14:58:08

1

这应该工作:

@"Method\((\w+)\)\((\w+)\)" 
+1

我认为这匹配所有。 – 2014-10-20 13:05:56

+0

现在应该可以工作 – HimBromBeere 2014-10-20 13:09:32

1

你应该escape the parentheses得到适当的比赛,并拿到赛只能从第一 occurence你应该使用^行启动anchor

string pattern = @"^Method\((.+)\)\((.+)\)"; 
0

使用下面的正则表达式,并从组索引值1和2.并打开不区分大小写的模式来执行不区分大小写的匹配。

@"(?is)^METHOD\(([^()]*)\)\(([^()]*)\)" 

应该拿起第一个方法,因为在DOTALL模式(?s)只有第一行的开头匹配^

DEMO

+0

谢谢拉吉。这也是有效的。不幸的是,我不能接受这个答案,因为在你之前已经有了另一个答案。 – 2014-10-20 14:06:18

+0

这是你的愿望..我发布了一个正则表达式唯一的解决方案。您不需要添加其他参数。所有在一个单一的正则表达式。 – 2014-10-20 14:07:13

相关问题