समस्या
आप स्ट्रिंग में टेक्स्ट पैटर्न को खोजना और बदलना चाहते हैं।
यदि हमारे पास एक बहुत ही सरल शाब्दिक पैटर्न है, तो str.replace() विधि का उपयोग करना एक इष्टतम समाधान है।
उदाहरण
def sample(): yield 'Is' yield 'USA' yield 'Colder' yield 'Than' yield 'Canada?' text = ' '.join(sample()) print(f"Output \n {text}")
आउटपुट
Is USA Colder Than Canada?
आइए पहले देखें कि टेक्स्ट को कैसे खोजा जाता है।
# search for exact text print(f"Output \n {text == 'USA'}")
आउटपुट
False
हम मूल स्ट्रिंग विधियों का उपयोग करके पाठ की खोज कर सकते हैं, जैसे कि str.find (), str.endswith (), str.startswith ()।
# text start with print(f"Output \n {text.startswith('Is')}")
आउटपुट
True
# text ends with print(f"Output \n {text.startswith('Is')}")
आउटपुट
True
# search text with find print(f"Output \n {text.find('USA')}")
आउटपुट
3
यदि खोज के लिए इनपुट टेक्स्ट अधिक जटिल है तो हम रेगुलर एक्सप्रेशन और पुनः मॉड्यूल का उपयोग कर सकते हैं।
# Let us create a date in string format date1 = '22/10/2020'
# Let us check if the text has more than 1 digit. # \d+ - match one or more digits import re if re.match(r'\d+/\d+/\d+', date1): print('yes') else: print('no') yes
अब, पाठ को बदलने के लिए वापस आ रहे हैं। यदि टेक्स्ट और बदलने के लिए स्ट्रिंग सरल है तो str.replace() का उपयोग करें।
आउटपुट
print(f"Output \n {text.replace('USA', 'Australia')}")
आउटपुट
Is Australia Colder Than Canada?
यदि खोज और बदलने के लिए जटिल पैटर्न हैं तो हम पुनः मॉड्यूल में उप () विधियों का लाभ उठा सकते हैं।
उप () के लिए पहला तर्क मिलान करने के लिए पैटर्न है और दूसरा तर्क प्रतिस्थापन पैटर्न है।
नीचे दिए गए उदाहरण में, हम दिनांक फ़ील्ड को dd/mm/yyyy में पाएंगे और उन्हें प्रारूप में बदल देंगे - yyyy-dd-mm। बैकस्लैश किए गए अंक जैसे \3 पैटर्न में समूह संख्याओं को कैप्चर करने के लिए देखें
import re sentence = 'Date is 22/11/2020. Tommorow is 23/11/2020.' # sentence replaced_text = re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', sentence) print(f"Output \n {replaced_text}")
आउटपुट
Date is 2020-22-11. Tommorow is 2020-23-11.
करने का एक अन्य तरीका बेहतर प्रदर्शन प्राप्त करने के लिए पहले अभिव्यक्ति को संकलित करना है।
आउटपुट
pattern = re.compile(r'(\d+)/(\d+)/(\d+)') replaced_pattern = pattern.sub(r'\3-\1-\2', sentence) print(f"Output \n {replaced_pattern}")
आउटपुट
Date is 2020-22-11. Tommorow is 2020-23-11.
re.subn() हमें टेक्स्ट को बदलने के साथ-साथ किए गए प्रतिस्थापनों की संख्या देगा।
आउटपुट
output, count = pattern.subn(r'\3-\1-\2', sentence) print(f"Output \n {output}")
आउटपुट
Date is 2020-22-11. Tommorow is 2020-23-11.
आउटपुट
print(f"Output \n {count}")
आउटपुट
2