也许这很容易,但我找不到解决方案。
我正在使用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个文本作为结果,第三个没有结果。
那么有人可以为我提供一个解决方案吗,一个简单的非单词操作员或正确的前瞻/后退方法?
答案 0 :(得分:2)
您可以使用
(?im)^.*\bthe car\b(?!.*\bnot\b).*
模式分解:
(?im)
- 启用不区分大小写和多行匹配模式^
- 开始一行(自使用(?m)
起).*
- 匹配0+任何字符,但换行符\bthe car\b
- 2个词“汽车”(2个字的序列)(?!.*\bnot\b)
- 如果在the car
.*
- 到换行符或字符串结尾