更可读的方式是不匹配句子中的否定词

时间:2017-07-20 14:39:39

标签: regex go

我试图在例如形容词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))
}

由于

1 个答案:

答案 0 :(得分:2)

不幸的是,出于性能原因(虽然Go regexp解析器无论如何都不是特别高效),Go的regexp包不支持lookahead / lookbehind,所以使用正则表达式没有很好的方法。

然而,正则表达式并不适合这种情况。它需要一个非常复杂的表达式才能进行非常简单的匹配。如果我正在实现类似的东西,我可能只是在空格/标点符号上拆分字符串并进行自己的匹配。更容易使用,可能性能更好。