Regex sas中的正则表达式,在匹配词后不匹配词
也许这很容易,但我找不到解决办法 我在使用perl正则表达式的Sas 9.3中工作。 我正在搜索一个正则表达式,它只匹配某些单词,而后面没有特定的其他单词。例如,它应该匹配您有“汽车”的所有文本,并且在此之后的所有其他文本中不应该有“不是”。(可以忽略大小写,因为我对代码中的所有内容都加了大小写) 应该匹配 这不是我想要的车 这辆车是绿色的 不应该匹配 这辆车不是绿色的 这是我想要的车,但没有 一种解决方案是将其分为两个匹配项:Regex sas中的正则表达式,在匹配词后不匹配词,regex,sas,Regex,Sas,也许这很容易,但我找不到解决办法 我在使用perl正则表达式的Sas 9.3中工作。 我正在搜索一个正则表达式,它只匹配某些单词,而后面没有特定的其他单词。例如,它应该匹配您有“汽车”的所有文本,并且在此之后的所有其他文本中不应该有“不是”。(可以忽略大小写,因为我对代码中的所有内容都加了大小写) 应该匹配 这不是我想要的车 这辆车是绿色的 不应该匹配 这辆车不是绿色的 这是我想要的车,但没有 一种解决方案是将其分为两个匹配项: prxmatch(“/The car/”,mytext)>0和pr
prxmatch(“/The car/”,mytext)>0和prxmatch(/The car.+not/”,mytext)=0
但是我必须多次使用该逻辑,在更复杂的情况下也是如此,所以我不想总是使用2个prxmatch,而是将逻辑组合到一个prxmatch中
我读了很多关于look aheads的书,并尝试了一些例子,但它们并不正确,例如:
"/The Car.+[^(not)]/"
或
或
第一个和第二个返回所有4个文本作为结果,第三个则根本没有结果
有人能为我提供一个解决方案吗?一个单词的简单not运算符,或者一个正确的向前看/向后看方法
(?im)^.*\bthe car\b(?!.*\bnot\b).*
模式分解:
-启用不区分大小写和多行匹配模式(?im)
-行的开头(因为使用了^
)(?m)
-匹配0+除换行符以外的任何字符*
-2个完整的单词“汽车”(由2个单词组成的序列)\b汽车\b
-如果在(?!.\bnot\b)
汽车的右侧某处有一个完整的单词“not”,则会导致匹配失败的负面前瞻
-换行符或字符串结尾前的行的其余部分*
(?m)
工作的原因(?i)
是一个不区分大小写的修饰符,(?m)
是一个多行修饰符,使^
在一行的开头而不是整个字符串的开头匹配。所以,“/^.*\b这辆车应该能用。如果是,我将发布。@Wiktor Stribiżew:K,我可以删除I,它仍然与(?m)一起工作。我有一个来自数据库的textfield,它由一些客户填写,比我的示例中的文本复杂得多。所以我猜文本是多行的,尽管它在我的sas结果视图中显示为单行文本。但非常感谢,如果你把第二个例子作为答案,我会接受的。因此,m是问题所在,因为选项在最后一个regex分隔符后面-Soprxparse('//ios)代码>例如i
=不敏感,o
=编译一次,我忘了S做了什么。我试图尽可能简化您的解决方案,“/the CAR(?)。+NOT)/”也适用于特定的示例,尽管您的解决方案对于更复杂的构造更为安全……如果您不需要完整的行匹配,当然,使用\b汽车
(或不区分大小写的版本(?i)\b汽车
)
"/^(?!.*not.*).*?The car.*$/"
(?im)^.*\bthe car\b(?!.*\bnot\b).*