একটি স্ট্রিংয়ে কোনো সাবস্ট্রিংর সকল অবস্থান (ইন্ডেক্স) বের করার জন্য লিস্ট কম্প্রিহেনশন এবং startswith() মেথড ব্যবহার করা যায়।
উদাহরণ
my_string = "Python learn code test fun amazing object oriented"
sub_string = "object"
print("স্ট্রিং:", my_string)
print("সাবস্ট্রিং:", sub_string)
# startswith() দিয়ে সব অবস্থান বের করা
positions = [i for i in range(len(my_string)) if my_string.startswith(sub_string, i)]
print("সাবস্ট্রিংর অবস্থানগুলো:", positions)
আউটপুট
স্ট্রিং: Python learn code test fun amazing object oriented
সাবস্ট্রিং: object
সাবস্ট্রিংর অবস্থানগুলো: [35]
ব্যাখ্যা
my_string.startswith(sub_string, i)— ইন্ডেক্সiথেকে সাবস্ট্রিং শুরুর হয় কিনা চেক করেrange(len(my_string))— স্ট্রিংর প্রতিটি অবস্থান চেক করে- লিস্ট কম্প্রিহেনশন সব মিলে যাওয়া ইন্ডেক্স সংগ্রহ করে
উন্নত পদ্ধতি: re মডিউল ব্যবহার
import re
positions = [m.start() for m in re.finditer(re.escape(sub_string), my_string)]
print(positions) # [35]
re.finditer বেশি দক্ষ এবং ওভারল্যাপিং ম্যাচও হ্যান্ডেল করতে পারে।
ওভারল্যাপিং ম্যাচ উদাহরণ
text = "aaaaa"
sub = "aa"
# startswith পদ্ধতি (ওভারল্যাপিং পাবে)
[i for i in range(len(text)) if text.startswith(sub, i)] # [0, 1, 2, 3]
# re.finditer (ডিফল্টে ওভারল্যাপিং দেবে না)
[m.start() for m in re.finditer(re.escape(sub), text)] # [0, 2]
# ওভারল্যাপিং পেতে lookahead ব্যবহার
[m.start() for m in re.finditer(f'(?={re.escape(sub)})', text)] # [0, 1, 2, 3]