2017-07-24 5 views
1

Problem: Ich verwende R und stringr und ich habe einen sehr langen regulären Ausdruck mit dem "oder" -Operator, den ich in einem Objekt speichern und mit stringr verwenden. Wie kann ich es in mehrere Zeilen in R aufteilen, damit ich nicht in meinem Quelltext-Editor weiter nach rechts scrollen muss? Wenn ich Kommas versuche, wird nur die erste Zeile erkannt. Die meisten Antworten auf diese Frage waren für andere Programmiersprachen (d. H. Nicht für R).Zerlegung eines langen regulären Ausdrucks in R

regex_of_sites <- "side|southeast|north|computer|engineer|first|south|pharm|left|southwest|level|second|thirteenth" 
+0

Sie sollten also die _ignore whitespace_ -Option und ** [format] (http://www.regexformat.com) ** Ihren Code verwenden. Nachdem Sie einen vollständigen ** [Trie] (http: // www. regexformat.com/version7_files/Rx5_ScrnSht01.jpg)** daraus '(? x) (?: Computer | Ingenieur | zuerst | le (?: ft | vel) | Norden | pharm | s (?: econd | ide | outh (?: ost | west)?) | dreizehntes) ' – sln

Antwort

3

Der reguläre Ausdruck ist nur eine Zeichenfolge. Sie können es zusammen über mehrere Zeilen wie jede andere Zeichenfolge

regex_of_sites <- paste0("side|southeast|north|computer|engineer|", 
    "first|south|pharm|left|southwest|", 
    "level|second|thirteenth") 
3

einfügen Da Sie das Muster mit stringr Methoden verwenden, die ICU regex Geschmack verwenden, können Sie einen (?x) freien Abstand verwenden (auch ausführliche genannt, oder das Muster Leerzeichen ignorieren) Modifikator, bei dem alle nicht gescannten Whitespaces ignoriert werden, wenn das Muster kompiliert wird. Es besteht die Möglichkeit, Kommentare nach einem unskipierten # in jeder Zeile hinzuzufügen (so muss das gesamte Literal mit Escapezeichen versehen werden). Hier

ist ein Beispiel:

> library(stringr) 
> regex_of_sites <- "(?x)side  # Term 0 
+ |southeast      # Term 1 
+ |north       # Term 1 
+ |computer      # Term 2 
+ |engineer 
+ |first 
+ |south 
+ |pharm 
+ |left 
+ |southwest 
+ |level 
+ |second 
+ |thirteenth" 
> str_extract_all("first level", regex_of_sites) 
[[1]] 
[1] "first" "level" 

Das gleiche Modifikator durch die PCRE Muster unterstützt wird in Basisfunktionen mit regulären Ausdruck R perl=TRUE verwendet.

+0

Was ist das' + 'in der Mitte der Regex für. Ist es für String-Parsing? Es kann nicht für die Regex sein. – sln

+0

@sln Es ist eine Kopie einfügen aus der R-Umgebung. –

Verwandte Themen