পাইথনে রেগুলার এক্সপ্রেশনে বিশেষ অক্ষর এস্কেপ করা

ধরুন যে এটি করা প্রয়োজন যাতে বিশেষ অক্ষরটি নিজেকেই বোঝায়। এর জন্য এটিকে ব্যাকস্ল্যাশ ব্যবহার করে এস্কেপ করতে হবে। আসুন উদাহরণে দেখি।

উদাহরণ

নিম্নলিখিত উদাহরণে, রেগুলার এক্সপ্রেশনের লেখক চেয়েছিলেন, যে অনুসন্ধান প্যাটার্নটি এইরকম দেখাবে: অক্ষর 'a', তারপর প্লাস '+', তারপর অক্ষর 'x'। যাইহোক, কোডের লেখক '+' চিহ্নটি এস্কেপ করেননি এবং তাই আসলে অনুসন্ধান প্যাটার্নটি এইরকম: অক্ষর 'a' এক বা একাধিক বার, তারপর অক্ষর 'x':

pythontxt = 'a+x ax aax aaax'
res = re.sub('a+x', '!', txt)

print(res)

কোড 실행ের ফলাফল:

python'a+x ! ! !'

উদাহরণ

এবং এখন লেখক ব্যাকস্ল্যাশ দিয়ে প্লাস এস্কেপ করেছেন। এখন অনুসন্ধান প্যাটার্নটি যেমন হওয়া উচিত ঠিক তেমন দেখাচ্ছে: অক্ষর 'a', তারপর প্লাস '+', তারপর অক্ষর 'x':

pythontxt = 'a+x ax aax aaax'
res = re.sub('a\+x', '!', txt)

print(res)

কোড 실행ের ফলাফল:

python'! ax aax aaax'

উদাহরণ

এই উদাহরণে, প্যাটার্নটি এইরকম দেখাচ্ছে: অক্ষর 'a', তারপর ডট '.', তারপর অক্ষর 'x':

pythontxt = 'a.x abx azx'
res = re.sub('a\.x', '!', txt)

print(res)

কোড 실행ের ফলাফল:

python'! abx azx'

উদাহরণ

এবং পরের উদাহরণে লেখক স্ল্যাশ এস্কেপ করতে ভুলে গেছেন এবং রেগুলার এক্সপ্রেশন দিয়ে সমস্ত সাবস্ট্রিং ক্যাপচার করেছে, কারণ আনএস্কেপড ডট যেকোনো অক্ষরকে বোঝায়:

pythontxt = 'a.x abx azx'
res = re.sub('a.x', '!', txt)

print(res)

কোড 실행ের ফলাফল:

python'! ! !'

মন্তব্য

খেয়াল করুন যে যদি আপনি ডটের জন্য ব্যাকস্ল্যাশ ভুলে যান (যখন এটির নিজেকে বোঝানো উচিত) - এটি নজর এড়িয়ে যেতে পারে:

pythonres = re.sub('a.x', '!', 'a.x')
print(res) # '!' রিটার্ন করবে, যেমন আমরা চেয়েছিলাম

দৃশ্যত সঠিকভাবে কাজ করে (যেহেতু ডট যেকোনো অক্ষরকে বোঝায়, এমনকি সাধারণ ডট '.' কেও)। কিন্তু যদি সেই স্ট্রিংটি পরিবর্তন করা হয়, যেখানে প্রতিস্থাপন ঘটছে - আমরা আমাদের ভুল দেখতে পাব:

pythonres = re.sub('a.x', '!', 'a.x abx azx')
print(res) # '! ! !' রিটার্ন করবে, কিন্তু '! abx azx' আশা করা হয়েছিল

বিশেষ অক্ষর এবং সাধারণ অক্ষরের তালিকা

যদি একটি সাধারণ অক্ষর এস্কেপ করা হয় - কোনো অঘটন ঘটবে না - এটি তবুও নিজেকেই বোঝাবে। ব্যতিক্রম - সংখ্যা, সেগুলি এস্কেপ করা যায় না।

প্রায়শই সন্দেহ জাগে যে এটি একটি বিশেষ অক্ষর কিনা। কেউ কেউ এতদূর যায় যে সব সন্দেহজনক অক্ষরকে একের পর এক এস্কেপ করে। যাইহোক, এটি একটি খারাপ অনুশীলন (রেগুলার এক্সপ্রেশনকে ব্যাকস্ল্যাশ দ্বারা আবর্জনাপূর্ণ করে)।

বিশেষ অক্ষর হল: $ ^ . * + ? \ / {} [] () |

বিশেষ অক্ষর নয়: @ : , ' " - _ = < > % # ~ `& !

ব্যবহারিক সমস্যা

Задание 1

একটি স্ট্রিং দেওয়া হয়েছে:

pythontxt = 'a.a aba aea'

একটি রেগুলার এক্সপ্রেশন লিখুন যা স্ট্রিং 'a.a' খুঁজে পাবে, বাকিগুলি ক্যাপচার না করে।

Задание 2

একটি স্ট্রিং দেওয়া হয়েছে:

pythontxt = '2+3 223 2223'

একটি রেগুলার এক্সপ্রেশন লিখুন যা স্ট্রিং '2+3' খুঁজে পাবে, বাকিগুলি ক্যাপচার না করে।

Задание 3

একটি স্ট্রিং দেওয়া হয়েছে:

pythontxt = '23 2+3 2++3 2+++3 345 567'

একটি রেগুলার এক্সপ্রেশন লিখুন যা স্ট্রিংগুলি '2+3', '2++3', '2+++3', খুঁজে পাবে, বাকিগুলি ক্যাপচার না করে (+ যেকোনো সংখ্যক হতে পারে)।

Задание 4

একটি স্ট্রিং দেওয়া হয়েছে:

pythontxt = '23 2+3 2++3 2+++3 445 677'

একটি রেগুলার এক্সপ্রেশন লিখুন যা স্ট্রিংগুলি '23', '2+3', '2++3', '2+++3', খুঁজে পাবে, বাকিগুলি ক্যাপচার না করে।

Задание 5

একটি স্ট্রিং দেওয়া হয়েছে:

pythontxt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'

একটি রেগুলার এক্সপ্রেশন লিখুন যা স্ট্রিংগুলি '*q+', '*qq+', '*qqq+', খুঁজে পাবে, বাকিগুলি ক্যাপচার না করে।

Задание 6

একটি স্ট্রিং দেওয়া হয়েছে:

pythontxt = '[abc] {abc} abc (abc) [abc]'

একটি রেগুলার এক্সপ্রেশন লিখুন যা বর্গাকার বন্ধনীতে থাকা স্ট্রিংগুলি খুঁজে পাবে এবং সেগুলিকে '!' দিয়ে প্রতিস্থাপন করবে।