正则表达式在c#中不匹配

Kri*_*ian 2 .net c# regex

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

正则表达式

^([[a-z][A-Z]]*):([[a-z][A-Z][0-9],]*)$
Run Code Online (Sandbox Code Playgroud)

示例字符串

Student:Tom,Jerry
Run Code Online (Sandbox Code Playgroud)

虽然同样的东西在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();
    }
Run Code Online (Sandbox Code Playgroud)

Joh*_*ell 9

尝试稍微改变你的正则表达式: -

([a-zA-Z]*):([a-zA-Z0-9,]*)
Run Code Online (Sandbox Code Playgroud)

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

(\w*):([\w\d,]*)
Run Code Online (Sandbox Code Playgroud)

没有必要进行多组分组,例如 [[a-z][A-Z]]

  • @KrishnaswamySubramanian你得到一个匹配,因为文本实际上只包含一个匹配你的模式.但是,该匹配应包含多个*组* - 尝试检查集合`pattern.Matches("Student:Tom,Jerry")[0] .Groups`.对于这样的文本,使用"匹配"方法更有意义,而不是"匹配",这仅在您希望文本包含更多模式匹配时才有用. (3认同)