Próbuję wyodrębnić liczbę z ciągu.
I zrób coś podobnego [0-9]+
do sznurka "aaa12xxx"
i zdobądź"12"
.
Pomyślałem, że to będzie coś takiego:
> grep("[0-9]+", "aaa12xxx", value=TRUE)
[1] "aaa12xxx"
A potem pomyślałem ...
> sub("[0-9]+", "\\1", "aaa12xxx")
[1] "aaaxxx"
Ale otrzymałem jakąś formę odpowiedzi:
> sub("[0-9]+", "ARGH!", "aaa12xxx")
[1] "aaaARGH!xxx"
Brakuje mi małego szczegółu.
?str_extract
, zobaczyłemstr_extract_all
i życie znów było dobre.Prawdopodobnie jest trochę pochopne powiedzenie `` ignoruj standardowe funkcje '' - plik pomocy
?gsub
nawet dla konkretnych odniesień w `` Zobacz także '':Więc to zadziała i jest dość proste:
źródło
Może
źródło
Możesz użyć leniwego dopasowywania wyrażeń regularnych PERL:
Próba zastąpienia cyfr niecyfrowych doprowadzi w tym przypadku do błędu.
źródło
Jednym ze sposobów byłoby to:
Teraz zauważ, że wyrażenie regularne podaje początkowe i końcowe indeksy łańcucha:
Możesz więc użyć tej informacji z funkcją substr
Jestem pewien, że istnieje bardziej elegancki sposób, aby to zrobić, ale był to najszybszy sposób, jaki znalazłem. Alternatywnie możesz użyć sub / gsub, aby usunąć to, czego nie chcesz, zostawić tego, czego chcesz.
źródło
Użyj nawiasów przechwytujących w wyrażeniu regularnym i grupuj odwołania w zamianie. Wszystko w nawiasach zostaje zapamiętane. Następnie uzyskuje do nich dostęp \ 2, pierwszy element. Pierwszy ukośnik odwrotny wymyka interpretację ukośnika odwrotnego w R, dzięki czemu jest przekazywany do parsera wyrażeń regularnych.
źródło
Używanie strapply w pakiecie gsubfn. strapply jest podobny do zastosowania w tym, że argumenty są obiektem, modyfikatorem i funkcją, z tym wyjątkiem, że obiekt jest wektorem łańcuchów (a nie tablicą), a modyfikator jest wyrażeniem regularnym (a nie marginesem):
To mówi, aby dopasować jedną lub więcej cyfr (\ d +) w każdym składniku x, przechodząc przez każde dopasowanie przez as.numeric. Zwraca listę, której składowe są wektorami dopasowań odpowiednich składników x. Patrząc na wynik, widzimy, że pierwszy składnik x ma jedno dopasowanie, które wynosi 13, a drugi składnik x ma dwa dopasowania, czyli 12 i 34. Więcej informacji można znaleźć pod adresem http://gsubfn.googlecode.com .
źródło
Inne rozwiązanie:
źródło
Jedna ważna różnica między tymi podejściami dotyczy zachowania z jakimikolwiek niezgodnościami. Na przykład metoda regmatches może nie zwrócić ciągu o tej samej długości co dane wejściowe, jeśli nie ma dopasowania na wszystkich pozycjach
źródło
Rozwiązanie na to pytanie
[[: digit:]] : cyfra [0–9]
{1,} : pasuje co najmniej 1 razy
źródło
Odklejając pakiet, wykonalibyśmy następujące czynności:
Utworzono 06.11.2019 przez pakiet reprex (v0.3.0)
Użyj
convert
argumentu, aby automatycznie przekonwertować na liczbę:źródło
Możesz napisać swoje funkcje regex w C ++, skompilować je do DLL i wywołać je z R.
zadzwoń w R as
źródło