উত্তর:
পাইথন ৩.6 থেকে আপনি ল্যাটারাল স্ট্রিং ইন্টারপোলেশন , "এফ-স্ট্রিংস" ব্যবহার করতে পারেন । আপনার বিশেষ ক্ষেত্রে সমাধানটি হ'ল:
if re.search(rf"\b(?=\w){TEXTO}\b(?!\w)", subject, re.IGNORECASE):
...do something
সম্পাদনা করুন:
যেহেতু বিশেষ চরিত্রগুলি কীভাবে মোকাবেলা করতে হবে সে সম্পর্কে মন্তব্যে কিছু প্রশ্ন রয়েছে আমি আমার উত্তরটি প্রসারিত করতে চাই:
কাঁচা স্ট্রিং ('আর'):
নিয়মিত অভিব্যক্তিগুলিতে বিশেষ অক্ষরের সাথে আচরণ করার সময় আপনাকে যে মুখ্য ধারণাগুলি বুঝতে হবে তা হ'ল স্ট্রিং লিটারাল এবং নিয়মিত প্রকাশের মধ্যেই পার্থক্য। এটি এখানে খুব ভালভাবে ব্যাখ্যা করা হয়েছে :
সংক্ষেপে:
এর পরিবর্তে একটি শব্দ সীমানা খুঁজে বের করার বলতে দাও \b
পর TEXTO
আপনি STRING মেলে চান \boundary
। আপনি লিখতে হবে:
TEXTO = "Var"
subject = r"Var\boundary"
if re.search(rf"\b(?=\w){TEXTO}\\boundary(?!\w)", subject, re.IGNORECASE):
print("match")
এটি কেবলমাত্র কাজ করে কারণ আমরা একটি কাঁচা-স্ট্রিং ব্যবহার করছি (রেজেক্সটি 'r' এর আগে রয়েছে), অন্যথায় আমাদের অবশ্যই রেজেক্সে "\\\\ সীমানা" লিখতে হবে (চারটি ব্যাকস্ল্যাশ)। তদ্ব্যতীত, '' r 'ব্যতীত, \ বি' শব্দের সীমানায় আর একটি ব্যাকস্পেসে রূপান্তরিত হবে না!
পুনরায় পরীক্ষা :
মূলত কোনও বিশেষ চরিত্রের সামনে একটি ব্যাকস্পেস রাখে। অতএব, আপনি যদি টেক্সটোতে একটি বিশেষ চরিত্রের প্রত্যাশা করেন, আপনাকে লিখতে হবে:
if re.search(rf"\b(?=\w){re.escape(TEXTO)}\b(?!\w)", subject, re.IGNORECASE):
print("match")
দ্রষ্টব্য: যেকোনো সংস্করণের জন্য> = পাইথন 3.7: !
, "
, %
, '
, ,
, /
, :
, ;
, <
, =
, >
, @
, এবং `
পলান নয়। শুধুমাত্র একটি রেজেক্সে অর্থ সহ বিশেষ অক্ষরগুলি এখনও অব্যাহতিপ্রাপ্ত। _
পাইথন ৩.৩ থেকে পলায়ন করা হয়নি ( এখানে )
কোঁকড়া ধনুর্বন্ধনী:
আপনি যদি এফ-স্ট্রিংগুলি ব্যবহার করে নিয়মিত প্রকাশের মধ্যে কোয়ান্টিফায়ার ব্যবহার করতে চান তবে আপনাকে ডাবল কোঁকড়া ধনুর্বন্ধনী ব্যবহার করতে হবে। ধরা যাক আপনি 2 টি সংখ্যার পরে টেক্সটওটি মিলাতে চান:
if re.search(rf"\b(?=\w){re.escape(TEXTO)}\d{{2}}\b(?!\w)", subject, re.IGNORECASE):
print("match")
fr"foo{{1,5}}"
(ধনুর্বন্ধনী ডবল)
আপনাকে একটি স্ট্রিং হিসাবে রেজেক্স তৈরি করতে হবে:
TEXTO = sys.argv[1]
my_regex = r"\b(?=\w)" + re.escape(TEXTO) + r"\b(?!\w)"
if re.search(my_regex, subject, re.IGNORECASE):
etc.
এর ব্যবহারটি নোট করুন re.escape
যাতে আপনার পাঠ্যে যদি বিশেষ অক্ষর থাকে তবে সেগুলি এর মতো ব্যাখ্যা করা হবে না।
r'' + foo + 'bar'
?
r''
যদি আপনি করেন তবে এটি প্রয়োজনীয় নয় re.escape(foo)
, যা আপনার যাই হোক না কেন। প্রকৃতপক্ষে, আমি মনে করি re
এটি ইউনিকোড স্ট্রিং হিসাবে যা দেওয়া হয়েছে তা আপনার উপসর্গ কিনা তা নির্বিশেষে ব্যাখ্যা করে r
।
if re.search(r"\b(?<=\w)%s\b(?!\w)" % TEXTO, subject, re.IGNORECASE):
এটি টেক্সটওতে যা আছে তা স্ট্রিং হিসাবে রেজেক্সে প্রবেশ করবে।
rx = r'\b(?<=\w){0}\b(?!\w)'.format(TEXTO)
আমি একাধিক ছোট নিদর্শন একসাথে স্ট্রিং করে একটি নিয়মিত প্রকাশের প্যাটার্ন তৈরি করা খুব সুবিধাজনক বলে মনে করি।
import re
string = "begin:id1:tag:middl:id2:tag:id3:end"
re_str1 = r'(?<=(\S{5})):'
re_str2 = r'(id\d+):(?=tag:)'
re_pattern = re.compile(re_str1 + re_str2)
match = re_pattern.findall(string)
print(match)
আউটপুট:
[('begin', 'id1'), ('middl', 'id2')]
আমি উপরোক্ত সকলের সাথে একমত না হলে:
sys.argv[1]
কিছু ছিল Chicken\d{2}-\d{2}An\s*important\s*anchor
sys.argv[1] = "Chicken\d{2}-\d{2}An\s*important\s*anchor"
আপনি ব্যবহার করতে চাইবেন না re.escape
, কারণ সেই ক্ষেত্রে আপনি এটি একটি রেজেক্সের মতো আচরণ করতে চান
TEXTO = sys.argv[1]
if re.search(r"\b(?<=\w)" + TEXTO + "\b(?!\w)", subject, re.IGNORECASE):
# Successful match
else:
# Match attempt failed
একে অপরের সাথে সাদৃশ্যপূর্ণ ব্যবহারকারী নামগুলি অনুসন্ধান করার দরকার ছিল এবং নেড ব্যাচেল্ডার যা বলেছেন তা অবিশ্বাস্যরূপে সহায়ক ছিল। যাইহোক, আমি আমার ক্লিয়ার আউটপুট পেয়েছি যখন আমি আমার পুনরায় অনুসন্ধানের শব্দটি তৈরি করতে re.compile ব্যবহার করেছি:
pattern = re.compile(r"("+username+".*):(.*?):(.*?):(.*?):(.*)"
matches = re.findall(pattern, lines)
নিম্নলিখিত ব্যবহার করে আউটপুট মুদ্রণ করা যেতে পারে:
print(matches[1]) # prints one whole matching line (in this case, the first line)
print(matches[1][3]) # prints the fourth character group (established with the parentheses in the regex statement) of the first line.
আপনি এটির জন্য ফর্ম্যাট কীওয়ার্ডও ব্যবহার করতে পারেন For ফর্ম্যাট পদ্ধতিটি আপনি আর্গুমেন্ট হিসাবে ফর্ম্যাট পদ্ধতিতে পাস করেছেন এমন ভেরিয়েবলটিতে}} স্থানধারককে প্রতিস্থাপন করবে।
if re.search(r"\b(?=\w)**{}**\b(?!\w)".**format(TEXTO)**, subject, re.IGNORECASE):
# Successful match**strong text**
else:
# Match attempt failed
আরও উদাহরণ
আমার কাছে প্রবাহের ফাইলগুলির সাথে কনফিগারেশন.আইএমএল রয়েছে
"pattern":
- _(\d{14})_
"datetime_string":
- "%m%d%Y%H%M%f"
পাইথন কোডে আমি ব্যবহার করি
data_time_real_file=re.findall(r""+flows[flow]["pattern"][0]+"", latest_file)