1) strcapture Jeśli chcesz wyodrębnić ciąg cyfr i kropek od "release 1.2.3"
zastosowaniem zasady następnie
x <- "release 1.2.3"
strcapture("([0-9.]+)", x, data.frame(version = character(0)))
## version
## 1 1.2.3
2) regexec/regmatches Istnieje również regmatches
i regexec
ale została już omówiona w innej odpowiedzi.
3) sub Również jest to często możliwe użycie sub
:
sub(".* ([0-9.]+).*", "\\1", x)
## [1] "1.2.3"
3a) Jeśli wiesz, że mecz jest na początku lub na końcu następnie usunąć wszystko przed lub po nim:
sub(".* ", "", x)
## [1] "1.2.3"
4) gsub Czasami wiemy, że pole do wyodrębnienia ma określone znaki i nie pojawiają się one gdzie indziej. W takim przypadku po prostu usunąć wszystkie wystąpienia każdej postaci, których nie można w ciągu:
gsub("[^0-9.]", "", x)
## [1] "1.2.3"
5) read.table Można często rozkładają wejście na pola, a następnie wybrać się żądany numer jeden przez lub za pośrednictwem grep
.strsplit
, read.table
lub scan
można stosować:
read.table(text = x, as.is = TRUE)[[2]]
## [1] "1.2.3"
5a) grep/skan
grep("^[0-9.]+$", scan(textConnection(x), what = "", quiet = TRUE), value = TRUE)
## [1] "1.2.3"
5b) grep/strsplit
grep("^[0-9.]+$", strsplit(x, " ")[[1]], value = TRUE)
## [1] "1.2.3"
6) podciąg Jeśli Znamy postać po żenia pola możemy użyć substring
takiego:
substring(x, 9)
## [1] "1.2.3"
6a) podciąg/RegExpr lub możemy być w stanie wykorzystać regexpr
zlokalizować pozycję znaku dla nas
substring(x, regexpr("\\d", x))
## [1] "1.2.3"
7) read.dcf Czasami istnieje możliwość przekonwertowania danych wejściowych na format DCF, w którym to przypadku można je odczytać za pomocą read.dcf
. Takie dane są w postaci name: value
read.dcf(textConnection(sub(" ", ": ", x)))
## release
## [1,] "1.2.3"
Zobacz https://stackoverflow.com/a/27274231/1017276 – Benjamin
myślę, że to jest dobry konkretne pytanie, które powinien mieć odpowiedź (zamiast zamykania jako dupe, chyba można znaleźć dokładniejsze dopasowanie). Ale proszę zrób dobry przykład, który nie zależy od plików specyficznych dla systemu operacyjnego, aby się odtworzyć. Może nawet pożyczysz niektóre przykłady z '? Str_extract'. – Gregor
Właściwą odpowiedzią jest: każde wyrażenie regularne powinno być dostosowane do użycia z podstawowymi funkcjami wyrażania R. Nie ma uniwersalnego rozwiązania. –