2

我正在尝试使用 C# 匹配以下模式并且找不到匹配项

正则表达式

^([[a-z][A-Z]]*):([[a-z][A-Z][0-9],]*)$

示例字符串

Student:Tom,Jerry

而同样的事情在 ruby​​ 中也有效(使用Rubular验证了它)。知道为什么这在 c# 中不起作用吗?

代码块

public static KeyValuePair<string, IList<string>> Parse(string s)
    {
        var pattern = new Regex(@"(\w*):([\w\d,]*)");
        var matches = pattern.Matches(s);
        if (matches.Count == 2)
        {
            return new KeyValuePair<string, IList<string>>(matches[0].Value, matches[1].Value.Split(','));
        }

        throw new System.FormatException();
    }
4

2 回答 2

9

尝试稍微更改您的正则表达式:-

([a-zA-Z]*):([a-zA-Z0-9,]*)

如果您想要所有单词字符(包括下划线),您甚至可以进一步简化它,如果没有,则使用上面的那个。

(\w*):([\w\d,]*)

无需多组分组,例如[[a-z][A-Z]]

于 2012-07-24T19:20:11.687 回答
1

您可以进一步简化它:

^([A-z]*):([\w,]*)$

第一组等价于[a-zA-Z],第二组等价于[a-zA-Z0-9]。如果您希望第一组匹配数字和字符,您可以简单地\w在任何地方使用。

于 2012-07-24T19:26:46.713 回答