2013-07-19 37 views
0

這正則表達式是接近我想要的:正則表達式半可選

(?i)(?<=\b(subject|title):?)[^:].+?$ 

我有這方面的例子:

  • subject:water front condo
  • subject: water front condo
  • subject water front condo
  • subjectwater front condo

與我目前的正則表達式,所有示例返回water front condo

我不希望最後一個例子匹配。如果:不存在,我如何需要空間?

我在.NET 4.0版上。

回答

0

您正在尋找交替|一個或另一個:

(?i)(?<=\b(subject|title)(:|))[^:].+?$ 
         ^^^^^ 

IMO雖然,你並不需要使用回顧後,你可以一樣好做:

(?i)\b(subject|title)(:|\s)\s*.+?$ 
+0

結束於(?i)(?<= \ b(subject | title | re:)(:| \ s))。+?$。我比以前更加努力了。我需要向後看不要捕捉。 – Paparazzi

+0

你可以通過在開頭添加一個'?:'來捕獲一個組,如下所示:'(?i)(?:\ b(subject | title | re:)(:| \ s))。+? $'。 –

+1

你們兩個正在談論不同類型的捕捉。 Blam正在討論整個正則表達式捕獲匹配的任何內容,捕獲組0。acheong87正在討論捕獲'()'中的正則表達式的部分 - 捕獲組1,2,等等。這兩種方法都可以工作,但需要略有不同代碼來提取匹配。在這種情況下,我認爲acheong87的方法會更容易。 –

0

用空格,最後行的事比賽 (< = \ B(主題|標題)?:)(我?)。?[^:] + $

+0

問題是「主題:水前沿公寓」現在匹配到「:水前沿公寓」。它不會丟失: – Paparazzi