Bagaimana saya bisa mengganti kemunculan karakter pertama di setiap kata?
Katakanlah saya punya string ini:
hello @jon i am @@here or @@@there and want some@thing in '@here"
# ^ ^^ ^^^ ^ ^
Dan saya ingin menghapus yang pertama @
pada setiap kata, sehingga akhirnya saya memiliki string terakhir seperti ini:
hello jon i am @here or @@there and want something in 'here
# ^ ^ ^^ ^ ^
Hanya untuk klarifikasi, karakter "@" selalu muncul bersama di setiap kata, tetapi bisa di awal kata atau di antara karakter lain.
Saya berhasil menghapus karakter "@" jika itu terjadi hanya sekali dengan menggunakan variasi regex yang saya temukan di Hapus substring ketika itu terjadi sekali, tetapi tidak ketika dua kali berturut-turut dalam python , yang menggunakan lookahead negatif dan lookbehind negatif:
@(?!@)(?<!@@)
Lihat hasilnya:
>>> s = "hello @jon i am @@here or @@@there and want some@thing in '@here"
>>> re.sub(r'@(?!@)(?<!@@)', '', s)
"hello jon i am @@here or @@@there and want something in 'here"
Jadi langkah selanjutnya adalah mengganti "@" ketika itu terjadi lebih dari satu kali. Ini mudah dengan melakukan s.replace('@@', '@')
untuk menghapus "@" dari mana pun itu terjadi lagi.
Namun, saya bertanya-tanya: apakah ada cara untuk melakukan penggantian ini dalam satu kesempatan?
@Hello@There
mana@
tidak akan berturut-turut?Jawaban:
Saya akan melakukan penggantian regex pada pola berikut:
Dan kemudian ganti dengan kelompok tangkapan pertama, yang semuanya merupakan simbol kontinu, minus satu.
Ini harus menangkap setiap yang
@
terjadi pada awal setiap kata, baik kata itu di awal, tengah, atau akhir string.Ini mencetak:
sumber
Bagaimana kalau menggunakan
replace('@', '', 1)
ekspresi generator?Nilai int
1
adalahcount
argumen opsional .str.replace(old, new[, count])
sumber
replace(search, replace, max_matches)
, itu hanya menggantikan yang pertama pada setiap kata.count
, saya menambahkan deskripsi dari dokumen.Anda bisa menggunakan
re.sub
seperti ini:Itu akan menghasilkan:
Dan inilah bukti konsep:
sumber
Sedang mempertimbangkan untuk kasus-kasus bagaimana jika hanya karakter terakhir
@
dan Anda tidak ingin menghapusnya, atau Anda memiliki karakter awal yang diizinkan yang spesifik, muncul dengan ini:Atau, misalkan Anda ingin mengganti
@
hanya jika ada dalam karakter n pertamasumber
DEMO
Anda bisa mencoba ini. Lihat demo.
sumber
Keluaran:
sumber