একটা regular expression (regex) একটা সঠিক string-এর বদলে টেক্সটের একটা pattern বর্ণনা করে — "যেকোনো email address" বা "যেকোনো phone number" match করা, একটা নির্দিষ্ট মান না। Python-এর built-in re module এসবই handle করে।
import re
text = 'My phone number is 555-1234'
match = re.search(r'\d{3}-\d{4}', text)
if match:
print(match.group()) # 555-1234| চিহ্ন | যা match করে |
|---|---|
| \d | যেকোনো digit (0-9) |
| \w | যেকোনো word character (অক্ষর, digit, underscore) |
| \s | যেকোনো whitespace |
| . | যেকোনো একক character |
| * | আগের character-এর শূন্য বা বেশি |
| + | আগের character-এর এক বা বেশি |
| ? | আগের character-এর শূন্য বা একটা (optional) |
| {n} | ঠিক n বার repetition |
| ^ $ | String-এর শুরু / string-এর শেষ |
text = 'Contact us at sam@example.com or admin@test.org'
emails = re.findall(r'[\w.]+@[\w.]+', text)
print(emails) # ['sam@example.com', 'admin@test.org']text = 'Call 555-1234 or 555-5678'
masked = re.sub(r'\d{3}-\d{4}', 'XXX-XXXX', text)
print(masked) # Call XXX-XXXX or XXX-XXXXParenthesis match-এর একটা অংশ চিহ্নিত করে যা আলাদাভাবে বের করার যোগ্য।
match = re.search(r'(\w+)@(\w+)\.com', 'sam@example.com')
print(match.group(1)) # sam
print(match.group(2)) # example| Function | উদ্দেশ্য |
|---|---|
| re.search() | string-এর যেকোনো জায়গায় প্রথম match খুঁজে |
| re.match() | শুধু string-এর একদম শুরুতে check করে |
| re.findall() | প্রতিটা match একটা list হিসেবে return করে |
| re.sub() | প্রতিটা match নতুন টেক্সট দিয়ে replace করে |
| re.split() | যেখানেই pattern match করে সেখানে একটা string ভাগ করে |
কখন regex-এর জন্য যাবেন না
সত্যিকারভাবে পড়ার অযোগ্য হয়ে যাওয়া একটা regex এটা আবার ভাবার একটা চিহ্ন — plain string method-এর কয়েকটা named step, বা HTML-এর মতো structured কিছুর জন্য একটা dedicated parsing library, জটিল case-এর জন্য প্রায়ই ভালো পছন্দ।