Saat mencoba mempelajari lebih banyak tentang ekspresi reguler, tutorial menyarankan agar Anda dapat menggunakan \b
untuk mencocokkan batas kata. Namun, cuplikan penafsir Python berikut tidak berfungsi seperti yang diharapkan:
>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)
Seharusnya itu adalah objek yang cocok jika ada yang cocok, tetapi memang demikian None
.
Apakah \b
ekspresi tidak didukung dalam Python atau saya salah menggunakannya?
re.search(r"\btwo\b", x)
r"\btwo\b"
?\b
.r'\b'
agar karakternya lolos. (atau double-escape itu\\b
, yukky)Jawaban:
Mengapa Anda tidak mencoba
Keluaran:
Juga lupa menyebutkan, Anda harus menggunakan string mentah dalam kode Anda
sumber
%
substitusi string adalah tangen yang buruk, tidak relevan dengan pertanyaan khusus ini.Ini akan berhasil:
re.search(r"\btwo\b", x)
Ketika Anda menulis
"\b"
di Python, itu adalah karakter tunggal:"\x08"
. Keluar dari garis miring terbalik seperti ini:atau tulis string mentah seperti ini:
sumber
Hanya untuk menjelaskan secara eksplisit mengapa
re.search("\btwo\b", x)
tidak berhasil, itu karena\b
dalam string Python adalah singkatan dari karakter spasi mundur.Jadi pola
"\btwo\b"
mencari backspace, diikuti olehtwo
, diikuti oleh backspace lain, yang tidak dimiliki string yang Anda cari (x = 'one two three'
).Untuk mengizinkan
re.search
(ataucompile
) menafsirkan urutan\b
sebagai batas kata, lepas dari garis miring terbalik ("\\btwo\\b"
) atau gunakan string mentah untuk membuat pola Anda (r"\btwo\b"
).sumber
Dokumentasi Python
https://docs.python.org/2/library/re.html#regular-expression-syntax
sumber