Inilah cara paling sederhana untuk menjelaskan ini. Inilah yang saya gunakan:
re.split('\W', 'foo/bar spam\neggs')
-> ['foo', 'bar', 'spam', 'eggs']
Inilah yang saya inginkan:
someMethod('\W', 'foo/bar spam\neggs')
-> ['foo', '/', 'bar', ' ', 'spam', '\n', 'eggs']
Alasannya adalah saya ingin membagi string menjadi token, memanipulasinya, lalu memasangnya kembali.
\W
? Saya gagal di google itu.Jawaban:
sumber
['foo', '/bar', ' spam', '\neggs']
?re.split('% ', re.sub('% ', '%% ', '5.000% Additional Whatnot'))
->['5.000%', 'Additional Whatnot']
Jika Anda membagi pada baris baru, gunakan
splitlines(True)
.(Bukan solusi umum, tetapi menambahkan ini di sini jika seseorang datang ke sini tidak menyadari metode ini ada.)
sumber
Solusi no-regex lain yang berfungsi dengan baik pada Python 3
sumber
Jika Anda hanya memiliki 1 pemisah, Anda dapat menggunakan pemahaman daftar:
Menambahkan / memisahkan pemisah:
Pemisah karena elemennya sendiri:
sumber
if x
untuk memastikan bahwa bongkahan yang diproduksi olehsplit
memiliki beberapa konten, yaituresult = [x + sep for x in text.split(sep) if x]
result = [sep+x for x in data.split(sep)]
result[0] = result[0][len(sep):]
contoh lain, pisahkan dengan non-alpha-numeric dan simpan separator
keluaran:
penjelasan
sumber
\W
cara yang lebih ringkas untuk mengekspresikannya.Anda juga dapat membagi string dengan array string alih-alih ekspresi reguler, seperti ini:
sumber
sumber
Satu Solusi Malas dan Sederhana
Asumsikan pola regex Anda adalah
split_pattern = r'(!|\?)'
Pertama, Anda menambahkan beberapa karakter yang sama dengan pemisah baru, seperti '[potong]'
new_string = re.sub(split_pattern, '\\1[cut]', your_string)
Kemudian Anda membagi pemisah baru,
new_string.split('[cut]')
sumber
[cut]
suatu tempat.Jika seseorang ingin memisahkan string sambil menjaga separator dengan regex tanpa menangkap grup:
Jika seseorang mengasumsikan bahwa regex dimasukkan ke dalam grup penangkap:
Kedua cara juga akan menghapus grup kosong yang tidak berguna dan menjengkelkan di sebagian besar kasus.
sumber
Berikut ini adalah
.split
solusi sederhana yang berfungsi tanpa regex.Ini adalah jawaban untuk Python split () tanpa menghapus pembatas , jadi tidak persis apa yang diminta posting asli tetapi pertanyaan lain ditutup sebagai duplikat untuk yang ini.
Tes acak:
sumber
Saya memiliki masalah serupa yang mencoba untuk memecah jalur file dan berjuang untuk menemukan jawaban yang sederhana. Ini berfungsi untuk saya dan tidak melibatkan harus mengganti pembatas kembali ke teks split:
my_path = 'folder1/folder2/folder3/file1'
import re
re.findall('[^/]+/|[^/]+', my_path)
pengembalian:
['folder1/', 'folder2/', 'folder3/', 'file1']
sumber
re.findall('[^/]+/?', my_path)
(mis. Membuat trailing slash menjadi opsional dengan menggunakan?
daripada memberikan dua alternatif|
.Saya menemukan pendekatan berbasis generator ini lebih memuaskan:
Ini menghindari kebutuhan untuk mencari tahu regex yang benar, sementara secara teori harus cukup murah. Itu tidak membuat objek string baru dan, mendelegasikan sebagian besar iterasi bekerja ke metode find efisien.
... dan dalam Python 3.8 bisa sesingkat:
sumber
ganti semua
seperator: (\W)
denganseperator + new_seperator: (\W;)
dibagi dengan
new_seperator: (;)
sumber