নিয়মিত অভিব্যক্তি মন্তব্য করার জন্য কোনও সাধারণ অভ্যাস রয়েছে: রেগেক্সের বিভিন্ন অংশ বা সমস্ত অভিব্যক্তির জন্য সাধারণ মন্তব্য উল্লেখ করে ইনলাইন মন্তব্যগুলি?
নিয়মিত অভিব্যক্তি মন্তব্য করার জন্য কোনও সাধারণ অভ্যাস রয়েছে: রেগেক্সের বিভিন্ন অংশ বা সমস্ত অভিব্যক্তির জন্য সাধারণ মন্তব্য উল্লেখ করে ইনলাইন মন্তব্যগুলি?
উত্তর:
আমার দৃষ্টিতে, একটি ভাল অনুশীলন হ'ল নিয়মিত প্রকাশের সাধারণ ধারণাটি কী তা মন্তব্যগুলিতে সংক্ষিপ্তভাবে জানানো। এটি অন্য বিকাশকারীদের (বা কখনও কখনও নিজেকে) সংরক্ষণ করে রেজিএক্সারের মতো পার্সারে রেগেক্সকে অনুলিপি-পেস্ট করার ঝামেলা কেবল এটি কী করে তা বোঝার জন্য।
এটি কিছুটা ভাষা নির্দিষ্ট উত্তর, তবে কোনও ভাষাই প্রশ্নটিতে বর্ণিত হয়নি।
"পাইথ ইন্ট পাইথন" বইটি ভার্বোজ নিয়মিত অভিব্যক্তি ব্যবহার করে মন্তব্যগুলি প্রয়োগ করার পরামর্শ দেয় :
পাইথন আপনাকে ভার্বোজ রেগুলার এক্সপ্রেশন বলে এমন কিছু দিয়ে এটি করতে দেয়। একটি ভারবস নিয়মিত প্রকাশ দুটিভাবে একটি কমপ্যাক্ট নিয়মিত প্রকাশের থেকে পৃথক:
- সাদা স্থান উপেক্ষা করা হয়। স্পেস, ট্যাব এবং ক্যারেজের রিটার্নগুলি স্পেস, ট্যাব এবং ক্যারেজের রিটার্ন হিসাবে মিলছে না। তারা মোটেও মেলে না। (আপনি যদি কোনও ভারবস নিয়মিত অভিব্যক্তিতে কোনও জায়গার সাথে মিল রাখতে চান, আপনার সামনে একটি ব্যাকস্ল্যাশ রেখে আপনাকে এড়াতে হবে))
- মন্তব্য উপেক্ষা করা হয়। একটি ভার্জোজ নিয়মিত প্রকাশের একটি মন্তব্য পাইথন কোডের একটি মন্তব্যের মতো: এটি একটি
#
অক্ষর দিয়ে শুরু হয় এবং লাইনটির শেষ অবধি চলে। এই ক্ষেত্রে এটি আপনার উত্স কোডের পরিবর্তে একাধিক-লাইনের স্ট্রিংয়ের মধ্যে একটি মন্তব্য, তবে এটি একইভাবে কাজ করে।
উদাহরণ:
>>> pattern = """
^ # beginning of string
M{0,4} # thousands - 0 to 4 M's
(CM|CD|D?C{0,3}) # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),
# or 500-800 (D, followed by 0 to 3 C's)
(XC|XL|L?X{0,3}) # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),
# or 50-80 (L, followed by 0 to 3 X's)
(IX|IV|V?I{0,3}) # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),
# or 5-8 (V, followed by 0 to 3 I's)
$ # end of string
"""
>>> re.search(pattern, 'M', re.VERBOSE) 1
উত্স এবং এখানে আরও বিশদ
এই পদ্ধতির সামান্য অসুবিধা রয়েছে যা কলকারী অবশ্যই জানতে হবে যে প্যাটার্নটি ভার্ভোজ ফর্ম্যাটে লেখা হয়েছে এবং সেই অনুযায়ী কল করুন।
re.compile
যে বিন্দুটি নিজের প্যাটার্নটি সংজ্ঞায়িত করেন সেই স্থানে আপনি ব্যবহার করতে পারেন এবং ফলস্বরূপ বস্তুটি কেবলমাত্র সংরক্ষণ করতে পারেন। এইভাবে, প্যাটার্ন সংকলন পতাকাগুলি (সহ re.VERBOSE
) নিজেই প্যাটার্ন থেকে পৃথক হওয়ার দরকার নেই।
#
ভার্বোজ পতাকাটি ব্যবহার করতে পারলে কীভাবে আমি মেলাতে পারি? উপায় দ্বারা: উত্স লিঙ্কগুলি ডাউন বলে মনে হচ্ছে।
#
অক্ষর শ্রেণীর অভ্যন্তরে আক্ষরিক সাথে এটি মিলানো যেতে পারে: [#]
(উত্স: docs.python.org/3/library/re.html#re.X )
সাধারণত, আমি একটি রেজেক্স লিখব এবং রেজেক্সের পৃথক টুকরো ব্যাখ্যা করব না, বরং এর উদ্দেশ্য কী। এই যে কি এবং কেন। এটি "আমার মন্তব্যগুলি দেখতে কেমন হওয়া উচিত?" জিজ্ঞাসার মতো কিছুটা যার মধ্যে কেউ বলবে " কোড কী করছে তা লিখবেন না, কোড কেন এটি করছে তা লিখুন "
// Strip the leading "?" and remove the query parameters "offset=<integer>" & "count=<integer> so we have a pattern of the request"
var search = location.search.substring(1).replace(/offset=[0-9]+?&/g, "").replace(/count=[0-9]+?&/g, "");
আপনি কোডে মন্তব্যের মাধ্যমে রেজিক্স সম্পর্কে কাউকে শেখানোর চেষ্টা না করা অবধি প্রতিটি পৃথক টুকরা কী করবে তা ব্যাখ্যা করার মতো আমি মনে করি না। অন্যান্য প্রোগ্রামারদের সাথে কাজ করার সময়, আপনি নিরাপদে ধরে নিতে পারেন যে কেউ বিশ্বব্যাপী নিয়মিত প্রকাশ হিসাবে কিছু জানতে পারে।
আমি অনুমান করি যে এটি আপনি কীভাবে একসাথে রেজেক্স স্থাপন করছেন তার উপর নির্ভর করে। সাধারণভাবে বলতে গেলে আমি মনে করি যে সত্যিকারের রেজেক্স স্ট্রিংয়ের মধ্যেই মন্তব্য রাখা ভাল ধারণা হবে (বেশিরভাগ পরিস্থিতিতেই সম্ভব নয়, যতদূর আমি জানি)) আপনার যদি সত্যিই কোনও নিয়মিত অভিব্যক্তির নির্দিষ্ট অংশটি মন্তব্য করতে হয় (আপনি কি কাউকে শেখানোর চেষ্টা করছেন?), তবে প্রতিটি অংশকে তাদের নিজস্ব লাইনে পৃথক স্ট্রিংয়ে বিভক্ত করুন এবং আপনার প্রোগ্রামিং ভাষার জন্য সাধারণ মন্তব্য প্রক্রিয়া ব্যবহার করে প্রতিটি লাইনে মন্তব্য করুন। অন্যথায়, প্লেনোলিজফের উত্তরটি বেশ ভাল।
উদাহরণ:
string myregex = "\s" // Match any whitespace once
+ "\n" // Match one newline character
+ "[a-zA-Z]"; // Match any letter
আমি সাধারণত একটি স্ট্রিং ধ্রুবক সংজ্ঞায়িত করি যার নাম নিয়মিত প্রকাশের সামগ্রিক উদ্দেশ্য বর্ণনা করে।
উদাহরণ স্বরূপ:
const string FloatingPointNumberPattern = @"[-+]?[0-9]*\.?[0-9]+";
এটিকে বর্ণনা দেওয়ার জন্য আপনি এই ধ্রুবকের উপরে একটি মন্তব্য যুক্ত করতে পারেন তবে সাধারণত ধ্রুবক নামটিই যথেষ্ট be
কিছু পরিস্থিতিতে, বিকাশকারীরা তাদের সাধারণ ডোমেনের বাইরে পাঠ্যের সাথে মেলে নিয়মিত প্রকাশ করতে পারেন। আসল বিকাশকারীরা বিভিন্ন প্রান্তের ক্যাপচারগুলি প্রচুর পরিমাণে পুনরাবৃত্তি হতে পারে যা কেবলমাত্র সেই পুনরুক্তি প্রক্রিয়া থেকেই আবিষ্কার করা যেতে পারে। সুতরাং, পরবর্তী বিকাশকারীরা সাধারণ বিকাশকারীরা সাধারণ ক্ষেত্রে সচেতন থাকলেও মূল প্রবর্তক (গুলি) যেগুলি মোকাবেলা করেছেন তার অনেকগুলি বিষয় সম্পর্কে অবগত হতে পারে না।
এ জাতীয় ক্ষেত্রে, তারতম্যের উদাহরণগুলি নথিভুক্ত করা সার্থক হতে পারে। এই ডকুমেন্টেশনের অবস্থান পরিমাণের উপর নির্ভর করে পরিবর্তিত হতে পারে (যেমন কোডে প্রয়োজনীয় নয়) necess
এর নিকটবর্তী হওয়ার একটি উপায় এটি ধরে নেওয়া যে ভবিষ্যতের বিকাশকারীদের কেবল নিয়মিত ভাবগুলি কীভাবে কাজ করে তার মতো কেবল প্রাথমিক জ্ঞান থাকবে, তবে আপনার (1) নিয়মিত প্রকাশের বিকাশের আগে যে জ্ঞান ছিল তা অবশ্যই জানা ছিল না ভবিষ্যতের বিকাশকারীগণ বা (২) আপনার বিকাশের সময় আপনি যে জ্ঞান অর্জন করেছেন (যেমন, প্রান্তের যেগুলি সন্ধান করা হয়েছিল)।
উদাহরণস্বরূপ, যদি বিকাশের সময় আপনি "ওহ, আমি জানতাম না যে এক্স এই ফর্মটি নিতে পারে" এর মতো কিছু বলে থাকেন তবে এটি ডকুমেন্টিংয়ের পক্ষে (এবং সম্ভবত সেই বৈচিত্রটি পরিচালনা করে রেজেক্সের অংশ) worth
মন্তব্যগুলিতে দরকারী তথ্য যুক্ত করা উচিত যা কোড থেকে সুস্পষ্ট নয়।
কয়েকটি সর্বশেষ চক্রের জন্য কয়েকটি অ্যাপ্লিকেশন রয়েছে যা আপনি যদি প্রচুর ডেটা সেটগুলির সাথে মিল রেখে প্যাটার্ন হন তবে সম্ভবত আরও ভাল উপায় আছে, নাও হতে পারে, তবে বেশিরভাগ ক্ষেত্রে অতিরিক্ত কার্যকর করার সময়টি এত বড় চুক্তি নয়।
এবং আপনার কোডটি পেরিয়ে পরবর্তী ব্যক্তির কথা মনে রাখবেন এবং ছয় মাসের মধ্যে কোনও বাগ আপনি ঠিক করতে পারেন এবং এটি করার কী ছিল তা আপনি মনে করার কোনও উপায় নেই।
একটি অর্থবোধক নাম সহ আলাদা শ্রেণিতে রেজিএক্সটি বের করুন। তারপরে আমি কোডটি স্বয়ংক্রিয় পরীক্ষার মাধ্যমে নথি করব।
এটি নিশ্চিত করবে
স্বাভাবিকভাবেই, আপনার ক্লাসে বেশ কয়েকটি রেজেক্স হোস্ট করা যেতে পারে।