2012-12-10 81 views
-4

我有一个字符串:正则表达式来查找所有匹配的语句

在锅内放1把2锅内放3锅...

高达

放n in pot

如何使用C#正则表达式来获取所有put语句,如:

“把1锅”
“把2锅”
“把3罐”
...
“n放在锅里”

n声明?

感谢

+3

这是功课? –

+1

你应该在发布前阅读FAQ http://stackoverflow.com/faq。 – psycho

回答

3

我可能不应该回答这个问题你的问题显示了没力气可言,但我觉得可能正则表达式是:

string regex = @"put (?<number>\d+) in pot"; 

然后你可以使用匹配:

var matches = Regex.Matches("Put 1 in pot put 2 in pot", @"put (?<number>\d+) in pot", RegexOptions.IgnoreCase); 
foreach (Match match in matches) 
{ 
    Console.WriteLine(match.Value); 
} 

要查找的实际数量,你可以使用

int matchNumber = Convert.ToInt32(match.Groups["number"].Value); 
+0

我很感谢你的回答,我真的很喜欢正则表达式,而且我尝试了几件事情,这些对我来说都没有用。我希望你能多一点帮助我。在这种情况下,如果我要获得所有以put开始并以pot结束的语句,那么将会是正则表达式。输入字符串可以是“插入表(a,b)值(1,2)插入表(​​a,b)值(1,2)”并且我想要捕获所有单个插入语句“Insert into table(a ,b)值(1,2)“ ps我尝试过”put。* pot“作为正则表达式,但它返回了整个字符串作为单个匹配或”插入。*值“在这种情况下。 再次感谢 –

+1

你需要去寻找最短的匹配('。*'是“贪婪”,因为这是最长的匹配)。使用'put。+?pot'时,最短匹配应该匹配。 –

1

你也可以做到这一点

var [email protected]"put.*?(?=put|$)"; 
List<string> puts=Regex.Matches(inp,reg,RegexOptions.Singleline) 
         .Cast<Match>() 
         .Select(x=>x.Value) 
         .ToList();  

put.*?(?=put|$) 
------ ------- 
|   | 
|   |->checks if `.*?`(0 to many characters) is followed by `put` or `end` of the file 
|->matches put followed by 0 to many characters 
+0

这是当我开始讨厌正则表达式和LINQ ;-) –

+0

你的答案适用于我的问题,你介意请解释正则表达式。 –

+0

@GurpreetSingh检查编辑 – Anirudha