2009-12-04 128 views
1

我已经创建了一个正则表达式,它应该匹配以Project开头的行,然后是#或:或 - 后跟1到3位数字或简单标题。 例如,以下行应该得到匹配这个正则表达式有什么问题?

项目#1

项目#1

项目:1

项目-123

项目名称


但下面不应该匹配

项目ABCD

项目* 978

我的项目

项目处理


我的正则表达式如下:

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

项目关键字应该在行首。

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

项目已处理:

我不知道为什么它正在发生。 任何人都可以找出我的正则表达式有什么问题吗?

我正在使用C#来执行此操作。

在此先感谢!

+0

我不知道答案,但我喜欢使用一个叫做Expresso的小工具。这对构建,玩和调试正则表达式很有用:http://www.ultrapico.com/Expresso.htm – 2009-12-04 08:01:57

+0

有点奇怪,我试过C#中的确切模式,与'处理的项目不匹配:' – 2009-12-04 08:09:09

+0

@okw,同样在这里 – 2009-12-04 08:14:59

回答

1

这样的模式怎么样?

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

它不匹配

项目ABCD

项目* 978

我的项目

项目处理

但将匹配以下模式

Project # 1 

Project#1 

Project :1 

Project-123 

Project Title 

有一个在项目名称:项目ABCD虽然混乱的一部分。 我以为你只想要标题案例。

1

这个工作对我来说:

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

这使得之前和之后Project-#:和三位数之间的可选空间

相关问题