Bagaimana saya bisa mendapatkan string setelah substring tertentu?
Sebagai contoh, saya ingin mendapatkan string setelah "world"
masukmy_string="hello python world , i'm a beginner "
Cara termudah mungkin hanya dengan membagi kata target Anda
my_string="hello python world , i'm a beginner "
print my_string.split("world",1)[1]
split mengambil kata (atau karakter) untuk dibagi dan secara opsional membatasi jumlah split.
Dalam contoh ini, perpecahan pada "dunia" dan batasi hanya untuk satu pemisahan.
target.split('lower',1)[-1].split('low',1)[-1]
my_string.partition("world")[-1]
(atau...[2]
) lebih cepat.Jika Anda ingin menangani kasing
s2
yang tidak adas1
, gunakans1.find(s2)
sebagai lawanindex
. Jika nilai balik dari panggilan itu adalah-1
, makas2
tidak ada dalams1
.sumber
print( s1[s1.index(s2) + len(s2):] is s1[s1.index(s2) + len(s2):])
Saya terkejut tidak ada yang disebutkan
partition
.IMHO, solusi ini lebih mudah dibaca daripada @ arshajii. Selain itu, saya pikir @ arshajii's adalah yang terbaik untuk menjadi yang tercepat - tidak membuat salinan / substring yang tidak perlu.
sumber
str.split(..., 1)
.Anda ingin menggunakan
str.partition()
:karena opsi ini lebih cepat daripada alternatifnya .
Perhatikan bahwa ini menghasilkan string kosong jika pembatas tidak ada:
Jika Anda ingin memiliki string asli, maka uji apakah nilai kedua yang dikembalikan dari
str.partition()
adalah tidak kosong:Anda juga dapat menggunakan
str.split()
dengan batas 1:Namun, opsi ini lebih lambat . Untuk skenario kasus terbaik,
str.partition()
dengan mudah sekitar 15% lebih cepat dibandingkan denganstr.split()
:Ini menunjukkan timing per eksekusi dengan input di sini pembatas tidak ada (skenario terburuk), ditempatkan pertama (skenario kasus terbaik), atau di bagian bawah, setengah atas atau posisi terakhir. Waktu tercepat ditandai dengan
[...]
dan<...>
menandai yang terburuk.Tabel di atas dihasilkan oleh uji waktu komprehensif untuk ketiga opsi, yang diproduksi di bawah ini. Saya menjalankan tes pada Python 3.7.4 pada model 2017 15 "Macbook Pro dengan 2,9 GHz Intel Core i7 dan 16 GB ram.
Script ini menghasilkan kalimat acak dengan dan tanpa hadir pembatas yang dipilih secara acak, dan jika ada, pada posisi yang berbeda dalam kalimat yang dihasilkan, menjalankan tes secara acak dengan pengulangan (menghasilkan hasil yang paling adil untuk peristiwa OS acak yang terjadi selama pengujian), dan kemudian mencetak tabel hasil:
sumber
Jika Anda ingin melakukan ini menggunakan regex, Anda bisa menggunakan grup yang tidak menangkap , untuk mendapatkan kata "dunia" dan kemudian mengambil semuanya setelahnya, seperti
Contoh string diuji di sini
sumber
result = re.search(r"(?:world)(.*)", "hello python world , i'm a beginner ").group(1)
Anda dapat menggunakan paket ini yang disebut "substring". Cukup ketikkan "pip install substring". Anda bisa mendapatkan substring dengan hanya menyebutkan awal / akhir karakter / indeks.
Sebagai contoh:
Keluaran:
s = defghijklmn
sumber
Ini adalah pertanyaan lama tetapi saya menghadapi skenario yang sangat sama, saya perlu membagi string menggunakan sebagai demiliter kata "rendah" masalah bagi saya adalah bahwa saya memiliki string yang sama kata di bawah dan lebih rendah.
Saya memecahkannya menggunakan modul re dengan cara ini
gunakan re.split dengan regex untuk mencocokkan kata yang tepat
kode generiknya adalah:
Semoga ini bisa membantu seseorang!
sumber
string.partition(" low ")[2]
:? (Perhatikan spasi di kedua sisilow
Coba pendekatan umum ini:
sumber
Dalam Python 3.9,
removeprefix
metode baru sedang ditambahkan:sumber