Bagaimanakah Ungkapan Biasa Boleh Memadankan Keseluruhan Perkataan dalam Rentetan dengan Cekap?

Barbara Streisand
Lepaskan: 2024-11-19 03:53:02
asal
632 orang telah melayarinya

How Can Regular Expressions Efficiently Match Whole Words in Strings?

Memadankan Seluruh Perkataan Secara Dinamik dalam Rentetan Menggunakan Ungkapan Biasa

Untuk menentukan sama ada sesuatu perkataan wujud dalam ayat, ungkapan biasa boleh digunakan. Memandangkan perkataan lazimnya dipisahkan oleh ruang tetapi boleh mempunyai tanda baca di kedua-dua belah pihak, adalah penting untuk mengelakkan padanan perkataan separa.

Satu pendekatan melibatkan penentuan corak regex yang berasingan untuk perkataan yang muncul di tengah, permulaan dan akhir rentetan seperti berikut:

match_middle_words = " [^a-zA-Z\d ]{0,}" + word + "[^a-zA-Z\d ]{0,} "
match_starting_word = "^[^a-zA-Z\d]{0,}" + word + "[^a-zA-Z\d ]{0,} "
match_end_word = " [^a-zA-Z\d ]{0,}" + word + "[^a-zA-Z\d]{0,}$"
Salin selepas log masuk

Walau bagaimanapun, ini memerlukan penentuan dan penggabungan berbilang corak regex. Pendekatan yang lebih mudah ialah memanfaatkan sempadan perkataan (b):

match_string = r'\b' + word + r'\b'
Salin selepas log masuk

Corak ini memastikan perkataan itu hanya ditangkap apabila ia dikelilingi oleh aksara bukan perkataan. Untuk senarai perkataan (cth., dalam 'perkataan' berubah-ubah), gunakan:

match_string = r'\b(?:{})\b'.format('|'.join(words))
Salin selepas log masuk

Kaedah ini berkesan memastikan penangkapan keseluruhan perkataan tanpa memerlukan berbilang corak.

Nota pada Sempadan Perkataan

Untuk senario yang lebih kompleks yang melibatkan perkataan dengan aksara khas atau di mana sempadan perkataan berbeza daripada ruang, takrifan sempadan alternatif boleh digunakan. Sempadan perkataan yang tidak jelas tidak termasuk perkataan yang bermula/berakhir dengan aksara khas:

match_string = r'(?<!\w){}(?!\w)'.format(re.escape(word))
Salin selepas log masuk

Sempadan ruang putih menganggap ruang dan rentetan permulaan/akhir sebagai sempadan perkataan:

match_string = r'(?<!\S){}(?!\S)'.format(word)
Salin selepas log masuk

Dengan menggunakan teknik ini, pemadanan keseluruhan perkataan dalam rentetan boleh dipermudahkan, memastikan hasil yang tepat dan konsisten.

Atas ialah kandungan terperinci Bagaimanakah Ungkapan Biasa Boleh Memadankan Keseluruhan Perkataan dalam Rentetan dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan