সমস্যা
একটি টেক্সট বা ফাইল থেকে সব ইমেইল ঠিকানা বের করা।
রেজেক্স প্যাটার্ন
r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+"
এই প্যাটার্নটি সাধারণ ইমেইল ফরম্যাট ম্যাচ করে (লোকাল-পার্ট @ ডোমেন)।
উদাহরণ কোড
import re
my_text = ("Please contact us at contact@tutorialspoint.com for further information. "
"You can also give feedback at feedback@tutorialspoint.com")
# findall() দিয়ে সব ম্যাচ বের করা
my_emails = re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", my_text, re.IGNORECASE)
print(my_emails)
# আউটপুট: ['contact@tutorialspoint.com', 'feedback@tutorialspoint.com']
ফাইল থেকে ইমেইল এক্সট্রাক্ট
import re
def extract_emails_from_file(filepath):
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
emails = re.findall(pattern, content)
return emails
# ব্যবহার
emails = extract_emails_from_file("data.txt")
print(emails)
প্যাটার্ন ব্যাখ্যা
| অংশ | অর্থ |
|---|---|
[a-zA-Z0-9._%+-]+ | লোকাল পার্ট: অক্ষর, সংখ্যা, ডট, আন্ডারস্কোর, পার্সেন্ট, প্লাস, হাইফেন |
@ | এট সাইন |
[a-zA-Z0-9.-]+ | ডোমেন নাম |
\. | ডট (ইস্কেপ করা) |
[a-zA-Z]{2,} | টপ-লেভেল ডোমেন (কমপক্ষে ২ অক্ষর) |
সীমাবদ্ধতা
এই রেজেক্স সব রFC-কম্প্লায়েন্ট ইমেইল কভার করে না (যেমন quoted local part, IP ডোমেন ইত্যাদি)। প্রোডাকশনে email-validator লাইব্রেরি ব্যবহার করুন।