Saya mencoba mengekstrak angka dari string.
Dan lakukan sesuatu seperti [0-9]+
pada tali "aaa12xxx"
dan dapatkan "12"
.
Saya pikir itu akan menjadi seperti:
> grep("[0-9]+", "aaa12xxx", value=TRUE)
[1] "aaa12xxx"
Dan kemudian saya pikir ...
> sub("[0-9]+", "\\1", "aaa12xxx")
[1] "aaaxxx"
Tapi saya mendapat beberapa bentuk tanggapan yang dilakukan:
> sub("[0-9]+", "ARGH!", "aaa12xxx")
[1] "aaaARGH!xxx"
Ada detail kecil yang saya lewatkan.
?str_extract
saya melihatstr_extract_all
dan hidup menjadi baik lagi.Mungkin agak terburu-buru untuk mengatakan ' abaikan fungsi standar ' - file bantuan
?gsub
bahkan untuk referensi khusus di 'Lihat juga':Jadi ini akan berhasil, dan cukup sederhana:
sumber
Mungkin
sumber
Anda dapat menggunakan pencocokan malas PERL regex:
Mencoba mengganti non-digit akan menyebabkan kesalahan dalam kasus ini.
sumber
Salah satu caranya adalah ini:
Sekarang, perhatikan regexpr memberi Anda indeks awal dan akhir dari string:
Jadi Anda bisa menggunakan info itu dengan fungsi substr
Saya yakin ada cara yang lebih elegan untuk melakukan ini, tetapi ini adalah cara tercepat yang dapat saya temukan. Atau, Anda dapat menggunakan sub / gsub untuk menghapus apa yang Anda tidak ingin meninggalkan apa yang Anda inginkan.
sumber
Gunakan tanda kurung pengambilan dalam ekspresi reguler dan referensi grup sebagai pengganti. Semua yang ada di dalam tanda kurung akan diingat. Kemudian mereka diakses oleh \ 2, item pertama. Garis miring terbalik pertama lolos dari interpretasi garis miring terbalik di R sehingga diteruskan ke parser ekspresi reguler.
sumber
Menggunakan strapply dalam paket gsubfn. strapply adalah seperti terapkan karena argsnya adalah objek, pengubah dan fungsi kecuali bahwa objek tersebut adalah vektor string (bukan array) dan pengubahnya adalah ekspresi reguler (bukan margin):
Ini mengatakan untuk mencocokkan satu atau lebih digit (\ d +) di setiap komponen x melewati setiap kecocokan melalui as.numeric. Ini mengembalikan daftar yang komponennya adalah vektor yang cocok dengan masing-masing komponen x. Melihat outputnya kita melihat bahwa komponen pertama x memiliki satu kecocokan yaitu 13 dan komponen kedua x memiliki dua kecocokan yaitu 12 dan 34. Lihat http://gsubfn.googlecode.com untuk info lebih lanjut.
sumber
Solusi lain:
sumber
Satu perbedaan penting antara pendekatan ini adalah perilaku dengan yang tidak cocok. Misalnya, metode regmatches tidak boleh mengembalikan string dengan panjang yang sama dengan masukan jika tidak ada kecocokan di semua posisi
sumber
Solusi untuk pertanyaan ini
[[: digit:]] : digit [0-9]
{1,} : Cocok setidaknya 1 kali
sumber
Menggunakan paket unglue kami akan melakukan hal berikut:
Dibuat pada 2019-11-06 oleh paket reprex (v0.3.0)
Gunakan
convert
argumen untuk mengonversi menjadi angka secara otomatis:sumber
Anda dapat menulis fungsi regex Anda dengan C ++, mengompilasinya menjadi DLL dan memanggilnya dari R.
panggil R sebagai
sumber