2014-07-07 47 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组,请务必使用多行,全球性和不敏感的修饰

下一次我建议你指定您正在使用的正则表达式编译器