পাইথনে নিয়মিত প্রকাশের সাথে সমস্ত মিল কীভাবে খুঁজে পাব?


312

একটি প্রোগ্রামে আমি লিখছি আমার কাছে পাইথন re.search()টেক্সটের একটি ব্লকে মিল খুঁজে পেতে এবং ফলাফলগুলি মুদ্রণের জন্য ফাংশনটি ব্যবহার করি । যাইহোক, পাঠ্য ব্লকের মধ্যে প্রথম ম্যাচটি খুঁজে পাওয়ার পরে প্রোগ্রামটি প্রস্থান করে।

সমস্ত মিল খুঁজে পাওয়া না যাওয়া পর্যন্ত প্রোগ্রামটি বন্ধ না হওয়া যেখানে আমি বারবার এটি করব কীভাবে? এটি করার জন্য আলাদা কোনও ফাংশন আছে?


রিকার্সিভ আরইগুলি একটি আলাদা জন্তু। আপনি অনুসন্ধান পুনরাবৃত্তি করতে চান।
outis

উত্তর:


545

ব্যবহার করুন re.findallঅথবা re.finditerপরিবর্তে।

re.findall(pattern, string) মিলে যাওয়া স্ট্রিংগুলির একটি তালিকা প্রদান করে।

re.finditer(pattern, string)MatchObjectবস্তুর উপর একটি পুনরাবৃত্তি প্রদান করে ।

উদাহরণ:

re.findall( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')
# Output: ['cats', 'dogs']

[x.group() for x in re.finditer( r'all (.*?) are', 'all cats are smarter than dogs, all dogs are dumber than cats')]
# Output: ['all cats are', 'all dogs are']

18
finditerআমি কি খুঁজছিলাম ছিল। আমি অবাক হয়েছি যে একটি ম্যাচ অবজেক্ট এবং অন্য স্ট্রিংগুলি ফিরিয়ে দেয়। আমি কোনও match_allবা match_iterফাংশনটি ব্যবহার করার প্রত্যাশা করছিলাম ।
ডিস্ক্লোজ

21
অস্বীকৃতি: সেগুলি কেবল অ-ওভারল্যাপিং ম্যাচগুলি খুঁজে পাবে
এন্টোইন লিজি

3
@ এন্টোইনলিজে, ওভারল্যাপের মাধ্যমে একজন পুনরাবৃত্তিগুলি কীভাবে খুঁজে পাবে?
রক্ষা

16
@ রক্ষা - re.searchএকটি লুপ ব্যবহার করুন । এটি একটি ফিরে আসবেMatch বস্তু । আপনি লুপটির পরবর্তী পুনরাবৃত্তির জন্য যুক্তি Match.start() + 1হিসাবে পাস করতে চাইবেন । posre.search
আর্টঅফ ওয়ারফেয়ার

3
যদি ম্যাচে একাধিক গ্রুপ থাকে, findall মিলে যাওয়া টিপলগুলির একটি তালিকা ফিরিয়ে দেবে, মেলানো স্ট্রিংগুলির তালিকা নয়।
রডোরগাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.