-1

我正在寻找一个正则表达式,它只匹配以下文本中单词“blah”的第 3、6、9、12、15、18、..... 等,而忽略第 1、2、4、5、7 , 8th,.... 等等。正则表达式应该只匹配 blah 的 3 次出现

The Band blah The Band blah  blah Up On Cripple Creek (2000 Digital Remaster) blah 2000 blah Greatest Hits blah The Band blah  blah The Weight (2000 Digital Remaster) blah 2003 blah Rhythm Of The Rain blah The Cascades blah  blah Rhythm Of The Rain (LP Version) blah 2005 blah Chronicle Volume One blah Creedence Clearwater Revival blah  blah Who'll Stop the Rain blah 1976 blah The Complete Sun Singles, vol. 1 blah Johnny Cash blah  blah I Walk the Line blah 2001 blah Greatest Hits blah Bob Seger blah  blah Against The Wind blah 1980 blah Their Greatest Hits blah The Eagles blah  blah Lyin' Eyes blah 1975 blah Johnny Horton's Greatest Hits blah Johnny Horton blah  blah North To Alaska 

提前致谢。

仅供参考,我将在 Hive 中使用这个正则表达式

4

3 回答 3

2

美观紧凑:

(?:blah.*?){2}(blah)
于 2013-03-31T00:29:49.187 回答
0
'(?:(?:.+?)blah(?:.+?)blah(?:.+?)(blah))'

这应该可行,但我不确定正则表达式是否是非常长文本的最佳解决方案

编辑以避免第一次捕获......虽然很明显OP不明白正则表达式的工作原理

于 2013-03-31T00:28:24.157 回答
0

由于我认为以前的两个答案都不是您想要的(根据您在评论中所说的),因此我也将把我的印记放在这里。
免责声明:我认为没有任何有效的方法可以只捕获第三个废话,但是,你仍然可以做到。
第1步:反转字符串,您将需要任意长度的lookbehind,这是您无法拥有的。但是您可以通过反转字符串并使用任意长度的前瞻来获得它们。
第 2 步:下面的正则表达式应该能捕捉到你想要的东西:

/halb(?=(?:(?:[^h]|h(?!alb))*halb){2}(?:[^h]|h(?!alb)|halb(?:(?:[^h]|h(?!alb))*halb){2})*$)/

第 3 步:尝试重新排序/反转...

(注意:由于我非常困,我没有测试它,如果需要的话会在几个小时内纠正它......)

编辑:
好的,现在更正了。所以它可以工作,但你仍然有向后的字符串。您必须反转数组中的所有字符串,然后反转数组。但是,它仍然有效。再一次,如果你有性能问题,如果可以的话,你可能想尝试使用所有格量词。

于 2013-03-31T00:41:29.853 回答