2009-12-04 131 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-#:和三位數之間的可選空間

相關問題