sas中的正则表达式,与匹配单词

时间:2016-03-16 14:52:13

标签: regex sas

也许这很容易,但我找不到解决方案。

我正在使用perl正则表达式在Sas 9.3中工作。 我正在寻找一个正则表达式,它只匹配一些未跟随特定其他单词的单词。例如,它应匹配您拥有“汽车”的所有文本,并且在此之后的所有其他文本中应该没有“不”。 (可以忽略大小写,因为我在代码中取消了所有内容)

应匹配

  

这不是我想要的车

     

汽车是绿色的

不应该匹配

  

汽车不是绿色

     

这是我想要的车,但它不可用

一种解决方案是将其拆分为两个匹配项:

prxmatch("/The car/",mytext) > 0 and prxmatch("/The car.+not/",mytext)=0

但是我必须多次使用逻辑,在更复杂的情况下,所以我不想总是使用2个prxmatch而是将逻辑组合在一个prxmatch中。

我读了很多关于展望未来并尝试了一些例子,但它们没有正常工作,例如:

"/The Car.+[^(not)]/"

"/The Car.+(?!not)/"

"/^(?!.*not.*).*?The car.*$/"

第一个和第二个返回所有4个文本作为结果,第三个没有结果。

那么有人可以为我提供一个解决方案吗,一个简单的非单词操作员或正确的前瞻/后退方法?

1 个答案:

答案 0 :(得分:2)

您可以使用

(?im)^.*\bthe car\b(?!.*\bnot\b).*

regex demo is available here

模式分解:

  • (?im) - 启用不区分大小写和多行匹配模式
  • ^ - 开始一行(自使用(?m)起)
  • .* - 匹配0+任何字符,但换行符
  • \bthe car\b - 2个词“汽车”(2个字的序列)
  • (?!.*\bnot\b) - 如果在the car
  • 右侧的某个地方有一个“not”字样的话,则表示匹配失败
  • .* - 到换行符或字符串结尾
  • 的其余部分