2016-10-31 8 views
2

Ich habe eine Spalte in einem Datenrahmen mit Adressen, die eine Zusammensetzung aus Einheit/Hausnummer, Straßenname, Ort, Postleitzahl und Telefonnummer sind.Regex zum Ersetzen von mindestens 5 Ziffern in einer Zeichenfolge

Die Postleitzahl ist eine vierstellige Nummer. Hier

ein Beispiel:

"26A JULIA STREET ANYTOWN 8523 71245632"

Ich möchte die Telefonnummern abzustreifen, aber die Postleitzahlen und andere Zahlen halten zurückzukehren:

"26A JULIA STREET ANYTOWN 8523"

Ich habe versucht, die folgenden:

str_replace(string=field_name$ADDRESS, pattern="\\d{5,}", replacement="")

Die Telefonnummern werden nicht entfernt. Kann jemand darauf hinweisen, wo ich falsch liege?

+1

auch gsub nutzen könnten. 'gsub (" \\ s + \\ d {5,} "," ", mystring)' - mit Regex, um führenden Platz zu löschen. – Zach

+0

Sie können auch alles erfassen, bis Sie die 4 Postleitzahlen gefunden haben. Verwenden Sie 'sub (" (. * \\ d {4}) "," \\ 1 ", Feldname $ ADDRESS)'. Dies funktioniert auch in Fällen, in denen keine Telefonnummern vorhanden sind. –

+1

Ihr Code funktioniert gut mit dem 'data.frame' von ** hrbrmstr ** – user2100721

Antwort

3

Ich persönlich mag die zusätzliche Einzelheiten des stringi Paket (und stringr wickelt es einfach mal so):

library(stringi) 
library(magrittr) 

field_name <- data.frame(ADDRESS="26A JULIA STREET ANYTOWN 8523 71245632", stringsAsFactors=FALSE) 

stri_replace_last_regex(field_name$ADDRESS, "[[:digit:]]{5,}", "") %>% 
    stri_trim() 
## [1] "26A JULIA STREET ANYTOWN 8523" 
Verwandte Themen