我试图在例如形容词not, never
之类的句子中不匹配否定词。目前我使用了字符级否定。 not
^(?:[^n]+|n(?:$|[^o]|o(?:$|[^t]|\w)))
的示例。对于一个或多个否定词(not, never, any, nobody, ......
),是否有一种简单的方法(更具可读性)。这是not
否定的代码:
package main
import(
"fmt"
"regexp"
)
func main (){
sentence:="he is not satisfied"
re := regexp.MustCompile(`^(?:[^n]+|n(?:$|[^o]|o(?:$|[^t])))\ssatisfied`)
fmt.Println(re.FindAllString(sentence, -1))
sentence="he is satisfied"
fmt.Println(re.FindAllString(sentence, -1))
}
由于
答案 0 :(得分:2)
不幸的是,出于性能原因(虽然Go regexp解析器无论如何都不是特别高效),Go的regexp包不支持lookahead / lookbehind,所以使用正则表达式没有很好的方法。
然而,正则表达式并不适合这种情况。它需要一个非常复杂的表达式才能进行非常简单的匹配。如果我正在实现类似的东西,我可能只是在空格/标点符号上拆分字符串并进行自己的匹配。更容易使用,可能性能更好。