2013-02-20 42 views
2

我有以下字符串正则表达式来选择2个字符串之间的文本?

Month: March 2011 
Month: January 2012 
Month: December 2011 

,我想写它可以选择每月的名称(如“三八”),仅在2011年这是一个正则表达式的意思是选择的路线“之间的一切月份“和”2011年“。 我做的正则表达式是

^(Month:)[A-Za-z0-9]+(2011)$ 

但它似乎没有工作。怎么了??? 结果应该是“三月”和“十二月”。 谢谢!

回答

1

使用前瞻:

/[a-z]+(?= 2011)/ig 

在这里看到它在行动:http://regex101.com/r/fE9lR9

这里是一个JavaScript演示:http://jsfiddle.net/rZJur/

+0

它的作品不错,但它是一个有点难受(为正则表达式一个真正的新手),以了解它是如何工作的。它将“2011年”背后的一切都考虑在内,但它如何排除“月份”? – Nicolaesse 2013-02-20 20:36:53

+1

@Nicolaesse'[a-z]'只匹配字符,所以冒号和月份名称之间的空格就是屏障。 – 2013-02-20 20:38:40

1

它不匹配,因为你不占白在月份和年份之间的空间。

^(?:Month:)([A-Za-z]+)(?: 2011)$ 

或者你可以使用前瞻/回顾后组合:

你可以占空间后捕获月组

(?<=^Month:)[A-Za-z]+(?= 2011$) 
+0

对不起队友,但第一个和第二个正则表达式都不适合我,请尝试以下链接http://regex101.com/r/jV2qU8 – Nicolaesse 2013-02-20 20:33:41

+0

你是对的,第二个不起作用,我修正了它。但第一个工作正常,你只需要从这个分组中得出结果。 – Michael 2013-02-20 20:40:56

1

这种表达的作品(向后看/向前看)(?<=Month\:\s)(.+?)(?=\s2011)

编辑: 只需非捕获组,这个工作:(?:Month\:\s)(.+?)(?:\s2011)

相关问题