gsub("(?<![0-9])0+", "", c("005", "0AB", "000", "0"), perl = TRUE)
#> [1] "5" "AB" "" ""
gsub("(^|[^0-9])0+", "\\1", c("005", "0AB", "000", "0"), perl = TRUE)
#> [1] "5" "AB" "" ""
Ekspresi reguler di atas berasal dari utas SO ini yang menjelaskan cara menghapus semua nol di awal dari string dalam R. Sebagai konsekuensi dari ekspresi reguler ini, "000" dan "0" ditransformasikan menjadi "". Alih-alih, saya ingin menghapus semua nol di awal dari serangkaian karakter, kecuali untuk kasus-kasus ketika karakter akhir menjadi nol, atau satu-satunya karakter adalah nol.
"005" would become "5"
"0AB" would become "AB"
"000" would become "0"
"0" would become "0"
Utas SO lainnya ini menjelaskan cara melakukan apa yang saya inginkan, tetapi saya rasa saya tidak mendapatkan sintaks yang benar, menerapkan solusi dalam R. Dan saya tidak terlalu memahami perbedaan antara solusi 1 dan 2 di bawah ini ( jika mereka memang bekerja).
gsub("s/^0*(\d+)$/$1/;", "", c("005", "0AB", "000", "0"), perl = TRUE) # 1st solution
# Error: '\d' is an unrecognized escape in character string starting ""s/^0*(\d"
gsub("s/0*(\d+)/$1/;", "", c("005", "0AB", "000", "0"), perl = TRUE) # 2nd solution
# Error: '\d' is an unrecognized escape in character string starting ""s/0*(\d"
Apa regex yang tepat dalam R untuk mendapatkan apa yang saya inginkan?
regex
cupu. Apa perbedaan kinerja (atau preferensi lain) antara pola Anda dan ini^0*(.+)$
atau itu^0+(.+)$
?.
dapat mencocokkan0
dan kedua pola yang berdampingan diukur secara tidak terbatas, tetapi hanya sedikit.Kami dapat menambahkan satu kondisi lagi dengan pencarian regex untuk memeriksa nilai-nilai tidak nol setelah satu atau lebih nol (
0+
)data
sumber
regex
guru dengan cara apa pun tetapi pencarian tidak efisien, bukan? Karena Anda memiliki duasub
Anda mungkin ingin menghapus semua nol terkemuka dan ganti""
dengan0
?sub("^$", "0", sub("^0+", "", v1), perl = TRUE)
Dengan menggunakan batas non kata . Lihat demo ini di regex101 atau demo R di tio.run .
\B
Ini tidak akan cocok dengan nol terakhir, karena di sana tidak ada karakter kata .
sumber
Anda bisa menggunakan pergantian untuk mencocokkan semua nol di string dalam grup penangkap atau mencocokkan semua nol dari awal string.
Dalam penggantian gunakan grup 1.
Demo Regex | R demo
Sebagai contoh
Keluaran
Atau bahkan lebih baik seperti yang dikomentari oleh Wiktor Stribiżew , Anda dapat menggunakan capture 0 tunggal dalam grup dan ulangi grup itu sendiri untuk menangkap instance terakhir dari nol.
Demo Regex
sumber
^(0)+$|^0+
sub("^0+(?!$)", "", x, perl=TRUE)
juga akan berfungsiregex
Opsi lain :Inilah demo regex .
Menggunakan
base::sub
dalam R:Berikut ini adalah demo R .
Atau memperluas pada jawaban @ akrun :
sumber