正则表达式在两个单词之间得到单词,这些单词应该只有一次

时间:2012-10-30 06:21:28

标签: regex

对于所有示例,需要'编程'作为输出

示例1:这是编程测试。
REGEX:a + \ sprogramming - Working

示例2:这是一个测试编程。这是一个编程测试
REGEX:a + \ s(?!test)\ sprogramming - Working

示例3:这是测试编程。这是一个基本的编程测试
REGEX:a + \ s(?!test)(。+)\ sprogramming - 不工作

实际O / P:基本的编程
预期的O / P:编程

也就是说,只需打印一次'a'。

提前致谢。

2 个答案:

答案 0 :(得分:2)

这是你在找什么?

REGEX : .*(a programming).*

O / p预期:

1.9.3p194 :001 > "This is a test programming. This is a basic a programming test ".match(/.*(a programming).*/)
 => #<MatchData "This is a test programming. This is a basic a programming test " 1:"a programming"> 
1.9.3p194 :002 > "This is a programming test. ".match(/.*(a programming).*/) => #<MatchData "This is a programming test. " 1:"a programming"> 
1.9.3p194 :003 > "This is a test programming. This is a programming test ".match(/.*(a programming).*/)
 => #<MatchData "This is a test programming. This is a programming test " 1:"a programming"> 

答案 1 :(得分:0)

我不确定我理解你的问题。

如果您希望匹配两个单词之间的单词,例如“a”和“test”,那么您可以这样做:

a\s+(\S+)\s+test

(大写字母为“S”的\S - 空白字符匹配。)

如果您只想要 last 这样的实例,那么:

a\s+(\S+)\s+test(?!.*a\s+(\S+)\s+test)

(请注意否定前瞻声明中的内容是外部部分的副本。)

此外,您还希望使用单词边界,例如

\ba\s+(\S+)\s+test\b(?!.*\ba\s+(\S+)\s+test\b)