পাইথনে রিজেক্স স্ট্রিংটি পালাচ্ছে


229

কিছু পাঠ্যের উপরে অনুসন্ধানের জন্য আমি একজন ব্যবহারকারীর কাছ থেকে রেজিক্স প্যাটার্ন হিসাবে ইনপুট ব্যবহার করতে চাই। এটি কাজ করে, তবে ব্যবহারকারী কীভাবে এমন অক্ষরগুলি রাখবেন যেখানে রেগেজেসের অর্থ রয়েছে? উদাহরণস্বরূপ, ব্যবহারকারী ওয়ার্ডের জন্য অনুসন্ধান করতে চান (s): রেজেক্স ইঞ্জিনটি (s)একটি গোষ্ঠী হিসাবে গ্রহণ করবে । আমি এটি একটি স্ট্রিং এর মতো আচরণ করতে চাই "(s)"। আমি replaceব্যবহারকারীর ইনপুটটিতে চলতে পারি এবং এর (সাথে \(এবং এর )সাথে \)প্রতিস্থাপন করতে পারি তবে সমস্যাটি হ'ল প্রতিটি সম্ভাব্য রেজেক্স প্রতীকটির জন্য প্রতিস্থাপন করতে হবে। আপনি কিছু ভাল উপায় জানেন?

উত্তর:


324

এর re.escape()জন্য ফাংশনটি ব্যবহার করুন:

4.2.3 reমডিউল বিষয়বস্তু

পালাবার (STRING)

সমস্ত অ-অক্ষরসংখ্যক ব্যাকস্ল্যাশযুক্ত স্ট্রিং ফেরত দিন; আপনি যদি কোনও সালিসী আক্ষরিক স্ট্রিংয়ের সাথে এটিতে নিয়মিত এক্সপ্রেশন মেটাচার্যাক্টর থাকতে পারে তবে এটি কার্যকর হয়।

সরল উদাহরণ, প্রদত্ত স্ট্রিংয়ের যেকোন ঘটনা সন্ধান করুন followedচ্ছিকভাবে 's' এর পরে এবং ম্যাচের অবজেক্টটি ফিরিয়ে দিন।

def simplistic_plural(word, text):
    word_or_plural = re.escape(word) + 's?'
    return re.match(word_or_plural, text)

53

আপনি পুনরায় পরীক্ষা () ব্যবহার করতে পারেন :

re.escape (স্ট্রিং) সমস্ত অ-অক্ষর সংখ্যার ব্যাকস্ল্যাশ সহ স্ট্রিং রিটার্ন করুন; আপনি যদি কোনও সালিসী আক্ষরিক স্ট্রিংয়ের সাথে এটিতে নিয়মিত এক্সপ্রেশন মেটাচার্যাক্টর থাকতে পারে তবে এটি কার্যকর হয়।

>>> import re
>>> re.escape('^a.*$')
'\\^a\\.\\*\\$'

3

দুর্ভাগ্যক্রমে, re.escape()প্রতিস্থাপন স্ট্রিংয়ের জন্য উপযুক্ত নয়:

>>> re.sub('a', re.escape('_'), 'aa')
'\\_\\_'

একটি সমাধান হল একটি ল্যাম্বডায় প্রতিস্থাপন করা:

>>> re.sub('a', lambda _: '_', 'aa')
'__'

কারণ ল্যাম্বদার রিটার্ন মানকে re.sub()আক্ষরিক স্ট্রিং হিসাবে বিবেচনা করা হয় ।


3
replআর্গুমেন্ট প্রাপ্ত করতে re.subএকটি স্ট্রিং, না একটি Regex হয়; re.escapeএটি প্রয়োগ করে প্রথমে কোনও অর্থ হয় না।
ট্রিপলি

5
@ ট্রিপলি এটি ভুল, replযুক্তিটি একটি সরল স্ট্রিং নয়, এটি বিশ্লেষণ করা হয়েছে। উদাহরণস্বরূপ, re.sub(r'(.)', r'\1', 'X')ফিরে আসবে X, না \1
ফ্লিম

4
replযুক্তি থেকে বাঁচার
ফ্লিম

3
সংস্করণ ৩.৩ এ পরিবর্তিত হয়েছে: '_' অক্ষরটি আর পালাতে পারেনি। সংস্করণ ৩.7 এ পরিবর্তিত হয়েছে: নিয়মিত অভিব্যক্তিতে বিশেষ অক্ষর থাকতে পারে এমন অক্ষরগুলিই এড়ানো যায়। (কেন এটি এত দিন লাগল?)
সিস টিমারম্যান

-3

একবার চেষ্টা করুন:

অ্যাঙ্কর হিসাবে \ প্রশ্ন এবং \ ই

একটি পূর্ণ শব্দের সাথে বা রেজেসের সাথে মেলে একটি শর্ত রাখুন।

রেফ লিংক: কীভাবে একটি পুরো শব্দের সাথে মেলে যাতে রেগেজেলে বিশেষ অক্ষর অন্তর্ভুক্ত থাকে

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