2014-07-07 89 views
3

我需要一個正則表達式,它抓住TheA以外的詞中的第一個n個字符。排除某些詞的正則表達式

例如,這裏是我的樣本數據集:

The firstMatch 
A SecondMatch 
the thirdMatch 
a Fourthmatch 

這裏是我試過的正則表達式:"^(.{3}).*$

,抓住每個輸入字符串的前三個字符。但每次輸入字符串的前三個字符,包括AThe我真正想要的是

所以,對於上述輸入串我想比賽是:

'fir', 'Sec, 'thi', 'Fou' 

如何任何想法做這個?

+0

您使用的是哪種語言? – zx81

+0

我正在使用ruby – user3562302

+0

@ zx81無所謂,現在所有語言都使用PCRE。 – MightyPork

回答

4

這要看正則表達式引擎使用的是(原來的問題沒有標記Ruby,所以我會離開其他選項。)

選項1:回顧後(C#,PHP,Java的)

(?im)(?<=^The |^a)\w{3} 

請參閱demo

許多引擎支持向後看,但並不支持可變寬度的向後看。

選項2:\K(PHP,Perl和Ruby的2+)

(?im)^(?:The |a)\K\w{3} 

demo見。

\K告訴引擎砸什麼,從它返回

方案3的最後一場比賽至今匹配:捕獲組(的JavaScript,Python和其他)

(?im)^(?:The |a)(\w{3}) 

the demo,在右側窗格中查看組1捕獲。

圓括號將匹配捕獲到組1.我們從組1中檢索它。

說明

  • (?i)接通不區分大小寫線
  • (?m)接通多行模式,允許^$以匹配每行
  • ^錨斷言我們在字符串的開頭
  • (?<=^The |^a)是一個向後看的聲明th在什麼先於當前位置是字符串和The,或字符串的開頭,然後a
  • (?:The |a)的開始是用OR |交替內部
  • 括號非捕獲組(\w{3})捕捉比賽進行到組1.

參考

+0

優秀的答案! –

+0

謝謝,卡里。 :) – zx81

3

使用此:

^(?:(?:the|a)\s+)?(.{3}) 

使用不區分大小寫的搜索。

原始正則表達式中的.*$部分是毫無意義的。

1

你可以做這樣的事情

^(the|A)? *(.{3}).+$ 

捕2組,請務必使用多行,全球性和不敏感的修飾

下一次我建議你指定您正在使用的正則表達式編譯器