这个正则表达式有什么问题?

时间:2009-12-04 07:58:42

标签: c# regex

我创建了一个正则表达式,该表达式应匹配以Project开头的行,后跟#或:或 - 后跟1到3位数字或简称Title。 例如,以下行应匹配

项目#1

项目#1

项目:1

项目-123

项目名称


但是以下内容不匹配

项目ABCD

项目* 978

我的项目

处理的项目


我的正则表达式如下:

^(\s)*?((Project( )*?(#|:|-| )( )*?(\d){1,3})|(PROJECT( )*?(#|:|-| )( )*?(\d){1,3})|Project Title|PROJECT TITLE)\b

项目关键字应位于该行的开头。

对于某些文本,这个正则表达式工作正常。 但是这个正则表达式匹配以下行:

  

项目处理:

我不知道为什么会这样。 任何人都可以找出我的正则表达式有什么问题吗?

我正在使用C#来做到这一点。

提前致谢!!!

3 个答案:

答案 0 :(得分:1)

这种模式怎么样?

@"Project\s*[#: -]\s*(?:\d+|[A-Z][a-z]+)"

不匹配
  

项目ABCD

     

项目* 978

     

我的项目

     

处理的项目

但是会匹配以下模式

Project # 1

Project#1

Project :1

Project-123

Project Title

虽然项目标题项目ABCD 存在混淆部分。 我以为你只想要标题案例。

答案 1 :(得分:1)

这对我有用:

Regex project = new Regex(@"^\s*?(?:Project *[#:\- ] *(\d){1,3}|Project Title)",
    RegexOptions.ECMAScript | RegexOptions.IgnoreCase | RegexOptions.Multiline);

答案 2 :(得分:1)

^\s*Project\s*([\-#:]\s*\d{1,3}|Title)\b

这允许在Project之前和之后以及-#:和三位数之间的可选空格