我想要匹配这个字符串
6 cakes 5 donuts 12 muffins
将文本分成三组,即
6个蛋糕
,5个甜甜圈
和12个松饼
。为了实现这一点,我使用了正则表达式。([\d]{1}[\s]{1}[\w]*)
但问题是它只匹配了第一组“6 cakes”,而忽略了其余的。我该如何修改以使该组重复出现?
您只需要使用Regex.Matches
获取一个MatchCollection,然后获取匹配项。正则表达式可以是:
\d+\s+\w+
请查看正则表达式演示
在C#中,
var str = "6 cakes 5 donuts 12 muffins";
var rx = new Regex(@"\d+\s+\w+");
var coll = rx.Matches(str);
foreach (Match m in coll)
Console.WriteLine(m.Value);
请参考IDEONE演示
您也可以使用LINQ:
var str = "6 cakes 5 donuts 12 muffins";
var rx = new Regex(@"\d+\s+\w+");
var coll = rx.Matches(str).Cast<Match>().Select(p => p.Value).ToList();
\d+(?:\s+\d+)*\s+\w+(?:\s+\d+)*(?=\s+\d+|$)
非常好用。非常感谢。 - Soham Dasgupta\d+(?:\s+\d+)*\s+\w+(?:\s+\d+(?=\s+\d+))?
- Wiktor Stribiżew