Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah saya boleh mencari semua kejadian subrentetan dalam Python?

Bagaimanakah saya boleh mencari semua kejadian subrentetan dalam Python?

Patricia Arquette
Patricia Arquetteasal
2024-12-12 21:58:10931semak imbas

How Can I Find All Occurrences of a Substring in Python?

Mencari Semua Kejadian Subrentetan dalam Python

Dalam Python, anda boleh menggunakan string.find() dan string.rfind() kaedah untuk mendapatkan semula indeks subrentetan dalam rentetan yang lebih besar. Walau bagaimanapun, tiada fungsi terbina dalam yang direka khusus untuk mengembalikan semua kejadian subrentetan.

Menggunakan Ungkapan Biasa

Pendekatan yang lebih berkuasa untuk mencari berbilang subrentetan kejadian adalah menggunakan ungkapan biasa:

import re

# Sample string
string = "test test test test"

# Find all occurrences of "test"
matches = [m.start() for m in re.finditer('test', string)]
print(matches)  # Output: [0, 5, 10, 15]

re.finditer menjana penjana yang menghasilkan padanan individu objek. Setiap objek padanan menyediakan indeks permulaan subrentetan yang sepadan.

Mempertimbangkan Padanan Bertindih

Secara lalai, pencari semula mencari padanan yang tidak bertindih. Untuk mencari padanan bertindih, gunakan pandangan positif:

matches = [m.start() for m in re.finditer('(?=tt)', 'ttt')]
print(matches)  # Output: [0, 1]

Ungkapan (?=tt) menegaskan bahawa subrentetan "tt" muncul pada kedudukan semasa tetapi tidak menggunakannya.

Reverse Find-All Tanpa Tindih

Untuk melakukan reverse find-all tanpa bertindih padan, gabungkan pandangan positif dan negatif:

search = 'tt'
matches = [m.start() for m in re.finditer('(?=%s)(?!.{1,%d}%s)' % (search, len(search)-1, search), 'ttt')]
print(matches)  # Output: [1]

Ungkapan ini memastikan bahawa "tt" muncul serta-merta selepas kursor tetapi tidak dalam julat lihat belakang tertentu (len(search)-1) dalam arah songsang.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mencari semua kejadian subrentetan dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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