Ich habe eine Zeichenfolge wie folgtEntfernen angegebenen Muster aus Zeichenfolge in R
s <- "abc a%bc 1.2% 234 1.2 (1.4%)) %3ed"
Ich mag würde alle „Wörter“, die die% haben zu entfernen. So wäre die Folge
"abc 234 1.2"
Ich habe eine Zeichenfolge wie folgtEntfernen angegebenen Muster aus Zeichenfolge in R
s <- "abc a%bc 1.2% 234 1.2 (1.4%)) %3ed"
Ich mag würde alle „Wörter“, die die% haben zu entfernen. So wäre die Folge
"abc 234 1.2"
Sie können
> gsub("^\\s+|\\s+$", "", (gsub("\\s+", " " ,gsub("\\s+\\S*%\\S*(?=\\s+|$)", " ",input, perl=TRUE))))
#[1] "abc 234 1.2"
-Code Aufteilung
gsub("^\\s+|\\s+$", "", (gsub("\\s+", " " ,gsub("\\s+\\S*%\\S*(?=\\s+|$)", " ",input, perl=TRUE))))
<--------------------------------------------------->
Remove strings with %
<------------------------------------------------------------------------>
Substitute extra spaces with single space from resultant string obtained from above
<-------------------------------------------------------------------------------------------------->
Trim initial and final whitespaces from the string obtained from above
Regex Pannen
\\s+ #Match whitespaces
\\S* #Match all non whitespace character before % if its there
% #Match % literally
\\S* #Match all non whitespace character after % if its there
(?=\\s+|$) #Lookahead to check whether there is a space or end of string after matching word with %
Könnte den Teil \\ S *% \\ S * (? = \\ s + | $) Ihrer Lösung erklären? –
Thnx @ rock321987 für die detaillierte Lösung –
@dimitris_ps Sie sind willkommen – rock321987
Sie diese verwenden können
library(stringr)
s <- "abc a%bc 1.2% 234 1.2 (1.4%)) %3ed"
words<-unlist(str_split(s," "))
ind<-which(is.na(str_locate(unlist(str_split(s," ")),"%")[,1]))
vec<-words[ind]
res<-paste(vec, collapse = ' ')
res
Sie können auch str_extract_all
von stringr
Paket verwenden:
stringr::str_extract_all(s, "(?<=^|\\s)[^%\\s]+(?=\\s|$)")
[[1]]
[1] "abc" "234" "1.2"
(?<=^|\\s)
steht für hinter der Suche entweder den Anfang der Zeichenfolge oder einem weißen Raum;
[^%\\s]+
stimmt mit einem Wort überein, das %
und Leerzeichen nicht enthält;
(?=\\s|$)
steht für einen Blick auf das Ende der Zeichenfolge oder einen Leerraum;
Warum enthalten Sie '()' und '|' innerhalb der Zeichenklasse? – rock321987
@ rock321987 Können Sie ein bisschen genauer sein? Ich glaube nicht, dass ich verstehe, was du meinst. – Psidom
'[]' ist eine Zeichenklasse..so bedeutet es, dass jedes Zeichen wörtlich behandelt wird. "[^ (% | \\ s)]' bedeutet, dass alles außer '(','% ',' | ', '\ s' oder') ' – rock321987
Wie dieser einfachen Ansatz Basis R:
s <- "abc a%bc 1.2% 234 1.2 (1.4%)) %3ed"
spl <- unlist(strsplit(s, " "))
spl[!grepl("%", spl)]
#[1] "abc" "234" "1.2"
Welche Probleme haben Sie mit Ihrem Code zu haben? – Jota
Ich weiß nicht, wie ich vorgehen soll –
Ich würde einen Blick auf die 'Gsub'-Funktion werfen, um loszulegen. – Jota