2017-02-08 5 views
0

Ich möchte bestimmte Felder herausfiltern, wenn sie keine Kriterien erfüllen. Das Problem ist ihre Reihenfolge. Ich habe versucht, folgende Konstruktionen:Regex mit Ausnahme von Wörtern in bestimmter Reihenfolge

(EXCLUDING)(?!\(MONDAY)(.*MONDAY).* 

und

(EXCLUDING)(?!\()(.*MONDAY).* 

Was will ich erreichen, einen Filter zu finden, als EXCLUDING * MONDAY fängt aber nicht, wenn es eine Klammer zwischen diesen Wörtern. Das heißt, ich will fangen:

EXCLUDING MONDAY 
EXCLUDING WEDNESDAY AND MONDAY 
EXCLUDING MONDAY AND WEDNESDAY 
EXCLUDING MONDAY (WEDNESDAY IS OK) 

aber nicht

Die Ausdrücke oben natürlich Fang von allen. Es ist in R zu laufen.

Antwort

1

Wie ist das?

mystrings <- c("EXCLUDING MONDAY", 
"EXCLUDING WEDNESDAY AND MONDAY", 
"EXCLUDING MONDAY AND WEDNESDAY", 
"EXCLUDING MONDAY (WEDNESDAY IS OK)", 
"EXCLUDING WEDNESDAY (MONDAY IS OK)") 

grepl("EXCLUDING[^\\(]+MONDAY", mystrings) 

> TRUE TRUE TRUE TRUE FALSE 
+0

perfekt, keine Ahnung, warum ich auf die negative Vorschau konzentriert – Slav

0

Wenn Sie wollen einfach nur ein Muster verwenden, wo ( nicht unmittelbar vor MONDAY auftreten sollten Sie negative Lookbehind Behauptung verwenden können. Ihre Regex war für negative Lookahead, deshalb hat es für (MONDAY nicht richtig funktioniert.

strs <- c("EXCLUDING MONDAY", 
      "EXCLUDING WEDNESDAY AND MONDAY", 
      "EXCLUDING MONDAY AND WEDNESDAY", 
       "EXCLUDING MONDAY (WEDNESDAY IS OK)", 
       "EXCLUDING WEDNESDAY (MONDAY IS OK)") 

grepl("EXCLUDING.*(?<!\\()MONDAY", strs, perl=TRUE) 
# [1] TRUE TRUE TRUE TRUE FALSE 
+1

danke, ich, ich habe nicht die negative Vorschau mit versucht zugeben müssen Slav

Verwandte Themen