2016-05-22 21 views
2

Ich bin mir sicher, dass ich das wusste, und ich bin mir sicher, dass dies irgendwo abgedeckt ist, aber da ich keine Google/SO-Treffer für diese Titelsuche finden kann, sollte es wahrscheinlich eine sein ..Split String OHNE Regex

Ich möchte eine Zeichenfolge ohne Regex, z

str = "abcx*defx*ghi" 

Natürlich können wir stringr::str_split oder strsplit mit dem Argument verwenden 'x[*]', aber wie können wir nur regex ganz unterdrücken?

+0

Das gleiche wie 'strsplit (str,'x [*] ')' .. – geotheory

+0

Ah ja. Ich vermute, 'str_split' hat keine Methode .. – geotheory

Antwort

4

Das Argument fixed=TRUE kann in diesem Fall

strsplit(str, "x*", fixed=TRUE)[[1]] 
#[1] "abc" "def" "ghi" 
1

Da die Frage auch ein stringr::str_split erwähnt, eine stringr Weise könnte hilfreich sein, auch nützlich sein.

Sie können str_split mit fixed(<YOUR_DELIMITER_STRING_HERE>, ignore_case = FALSE) oder coll(pattern, ignore_case = FALSE, locale = "en", ...) verwenden. Siehe stringr docs:

fixed: Vergleichen Sie Literal Bytes in der Zeichenfolge. Dies ist sehr schnell, aber normalerweise nicht das, was Sie für Nicht-ASCII-Zeichensätze wollen.
coll Vergleichen Saiten Standard Kollatierungsregeln

respektieren Siehe folgende R Demo:

> str_split(str, fixed("x*")) 
[[1]] 
[1] "abc" "def" "ghi" 

Sortierungen besser sind mit einem Buchstaben dargestellt, die zwei Darstellungen haben:

> x <- c("Str1\u00e1Str2", "Str3a\u0301Str4") 
> str_split(x, fixed("\u00e1"), simplify=TRUE) 
    [,1]  [,2] 
[1,] "Str1"  "Str2" 
[2,] "Str3áStr4" ""  
> str_split(x, coll("\u00e1"), simplify=TRUE) 
    [,1] [,2] 
[1,] "Str1" "Str2" 
[2,] "Str3" "Str4" 

A note about fixed() :

fixed(x) entspricht nur der genauen Bytefolge, die von x angegeben wird. Dies ist ein sehr begrenztes "Muster", aber die Einschränkung kann die Anpassung viel schneller machen. Vorsicht bei der Verwendung von fixed() mit nicht-englischen Daten. Es ist problematisch, weil es oft mehrere Möglichkeiten gibt, dasselbe Zeichen darzustellen. Zum Beispiel gibt es zwei Möglichkeiten, "á" zu definieren: entweder als einzelnes Zeichen oder als "a" plus Akzent. ...
coll(x) sucht nach einer Übereinstimmung mit x unter Verwendung von Kollationsregeln in menschlicher Sprache und ist besonders wichtig, wenn Sie die Groß-/Kleinschreibung nicht beachten wollen. Die Regeln für die Sortierung unterscheiden sich auf der ganzen Welt. Daher müssen Sie auch einen Gebietsschema-Parameter angeben.