【发布时间】:2015-08-04 21:55:40
【问题描述】:
我要匹配字符串
6 cakes 5 donuts 12 muffins
分为三组,即。 6 cakes、5 donuts、12 muffins。为了实现这一点,我使用了正则表达式
([\d]{1}[\s]{1}[\w]*)
但问题是它只匹配第一组6 cakes 而忽略其余部分。如何更改它以使组重复。
【问题讨论】:
我要匹配字符串
6 cakes 5 donuts 12 muffins
分为三组,即。 6 cakes、5 donuts、12 muffins。为了实现这一点,我使用了正则表达式
([\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);
您也可以使用 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();
【讨论】:
3 beers 5 chicken 65 9 cakes 会坏掉。
\d+(?:\s+\d+)*\s+\w+ 正则表达式。
3 beers、5 chicken 和65 9 cakes,而不是匹配3 beers、5 chicken 65 和9 cakes。
65属于chicken?背后的逻辑是什么?直到最后的所有数字后跟空格都属于上一个条目?