2017-07-20 2 views
0

Ich versuche, negiertes Wort in einem Satz wie Adjektiv mit not, never zum Beispiel nicht zu entsprechen. Zur Zeit habe ich die Negation der Zeichenebene verwendet. Beispiel für not^(?:[^n]+|n(?:$|[^o]|o(?:$|[^t]|\w))). Gibt es einen einfachen Weg (lesbarer), dies für ein oder mehrere Negationswörter zu tun(). Hier ist ein Code für not Negation:Mehr lesbare Möglichkeit, nicht negierte Wörter in einem Satz zu finden

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)) 
} 

Dank

Antwort

2

Leider aus Performance-Gründen (obwohl die Go regexp Parser nicht besonders performant ist sowieso), Gos regexp Paket nicht Look-Ahead/Lookbehind unterstützen, so dass es ist keine gute Möglichkeit, dies mit regulären Ausdrücken zu tun.

Reguläre Ausdrücke sind jedoch sowieso nicht gut dafür geeignet. Es erfordert einen sehr komplexen Ausdruck, um eine sehr einfache Übereinstimmung zu erzielen. Wenn ich etwas Ähnliches implementieren würde, würde ich wahrscheinlich die Zeichenfolge auf Leerzeichen/Satzzeichen aufteilen und meinen eigenen Abgleich durchführen. Einfacher zu arbeiten und wahrscheinlich bessere Leistung.

+0

Vielen Dank für die Antwort. – David

+0

Bitte erläutern Sie, wie dies erreicht werden kann, wenn wir reguläre Ausdrücke in anderen Sprachen ins Go-Programm übersetzen müssen. Vielen Dank. – David

Verwandte Themen