Bei der Verarbeitung und Segmentierung von Zeichenketten, ob Suchanfragen aus der Google Search Console oder Keywords einer umfangreichen Recherche, ist es oftmals notwendig zu prüfen, welche Worte enthalten sind und die Zeichenkette einem Segment zu zuordnen. Hier helfen reguläre Ausdrücke bei der Suche nach Mustern in den Zeichenketten.
Im folgenden Beispiel trifft die einfache Suche nach dem String „flaschen“ auf alle Zeichenketten zu:

Ziel meiner Suche ist jedoch, nur Zeichenketten zu identifizieren, die alleinstehend „flaschen“ enthalten. Also das Wort entweder am Anfang, am Ende oder innerhalb einer Zeichenkette enthalten, ohne das es Bestandteil eines anderen Wortes ist. Entsprechend formuliere ich einen regulären Ausdruck der dies berücksichtigt:

Nun ist es keine wahre Freude, für mehrere Dutzend oder gar hunderte Begriffe den gleichen regulären Ausdruck zu tippen. Mit einer kleinen, recht hemdsärmelig geschriebenen Funktion schaffe ich mir hier Abhilfe und erleichtere mir die Arbeit.
Die folgende R-Funktion erlaubt es Dir, aus den Begriffen innerhalb einer Spalte deines Dataframes einen regulären Ausdruck zu bilden, der das exakte Muster eines gewünschten Begriffs auswählt. Vorangehende oder nachfolgende Zeichen werden nicht berücksichtigt, so dass nur der wirklich gesuchte Begriff einen Treffer erzeugt.
create_regex <- function(df_input, col_input) {
df_output <- df_input %>%
mutate(
temp_begriff = tolower(col_input),
temp_vorne = str_extract(temp_begriff, "^\\D"),
temp_mitte = str_extract(temp_begriff, "(?<=\\D).+(?=\\D$)"),
temp_hinten = str_extract(temp_begriff, "\\D$"),
regex = paste0(
"\\b",
temp_vorne,
"{1,2}[\\sh]?",
temp_mitte,
"\\s?",
temp_hinten,
"{1,2}\\b"
)
) %>% select(-starts_with("temp_"))
return(df_output)
}
So funktioniert die Funktion:
- Das Eingabedatenframe (
df_input
) wird zunächst durch diemutate
-Funktion aus demdplyr
-Paket übergeben. Dadurch kann eine neue Spalte auf Basis der vorhandenen Spalten im Datenframe erstellt werden. - Die Funktion
tolower
wird verwendet, um die Werte in der angegebenen Spalte (col_input
) in Kleinbuchstaben umzuwandeln. Dies wird getan, um Unstimmigkeiten im regulären Ausdruck aufgrund der Groß-/Kleinschreibung zu vermeiden. - Drei neue Spalten werden mit der Funktion
str_extract
aus demstringr
-Paket erstellt. Diese Spalten werden verwendet, um Informationen zu extrahieren, die zur Konstruktion des regulären Ausdrucks verwendet werden.
temp_vorne
: Dies extrahiert das erste Nicht-Ziffern-Zeichen im String. Dies wird verwendet, um den Anfang eines Worts im regulären Ausdruck abzugleichen.temp_mitte
: Dies extrahiert alle Nicht-Ziffern-Zeichen in der Mitte des Strings. Dies wird verwendet, um die Mitte eines Worts im regulären Ausdruck abzugleichen.temp_hinten
: Dies extrahiert das letzte Nicht-Ziffern-Zeichen im String. Dies wird verwendet, um das Ende eines Worts im regulären Ausdruck abzugleichen.
- Die
regex
-Spalte wird durch die Funktionpaste0
erstellt. Diese kombiniert die extrahierten Werte zu einem regulären Ausdruck, der in der neuen Spalte gespeichert wird. - Die Spalten, die mit „temp_“ beginnen, werden mit der
select
-Funktion und dem Argument-starts_with("temp_")
entfernt. - Das modifizierte Datenframe wird durch
return
zurückgegeben.