2012-07-24 61 views
2

我想用C#匹配以下模式匹配,并没有得到匹配发现正则表达式是不是在C#

正则表达式

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

样品字符串

Student:Tom,Jerry 

而同样的事情在红宝石中工作(使用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(); 
    } 
+0

真的不是不熟悉c,任何你需要逃避的东西吗? – Sturm 2012-07-24 19:18:16

+1

你正在做的范围错误,应该是:'^([a-zA-Z] *):([a-zA-Z0-9,] *)$' – hazzik 2012-07-24 19:20:16

+1

[RegExr](http://gskinner.com/RegExr /)对于这类事情来说是一个很好的工具:下面是你的示例[working](http://regexr.com?31kih)和[not working](http://regexr.com?31kik)。 – RichardTowers 2012-07-24 19:23:48

回答

9

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

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

你甚至可以把它简化远一点,如果你希望所有单词字符(包括下划线),如果没有则使用上面的那个。

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

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

+0

它的作品,但当我打电话匹配我只得到一场比赛,而我期待两个比赛组 – 2012-07-24 19:29:36

+0

@KrishnaswamySubramanian你仍然使用相同的测试短语?我刚刚尝试了http://regexr.com?31kin和C#应用程序,它完全适用于我:(使用“学生:汤姆,杰里”它显示了两个组“学生”和“汤姆,杰里” – 2012-07-24 19:33:05

+0

是的!但仍然只有一个匹配 var pattern = new Regex(@“(\ w *):([\ w \ d,] *)”); pattern.matches(“Student:Tom,Jerry”) – 2012-07-24 19:37:03

1

您可以更加简化它:

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

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