নিয়মিত মত প্রকাশের মন্তব্য


11

নিয়মিত অভিব্যক্তি মন্তব্য করার জন্য কোনও সাধারণ অভ্যাস রয়েছে: রেগেক্সের বিভিন্ন অংশ বা সমস্ত অভিব্যক্তির জন্য সাধারণ মন্তব্য উল্লেখ করে ইনলাইন মন্তব্যগুলি?


2
আছে তবে আপনার আরও সুনির্দিষ্ট হওয়া দরকার। উদাহরণস্বরূপ বাশ ইনলাইন মন্তব্যগুলিকে সমর্থন করে এবং পাইথন ভার্ভোজ নিয়মিত প্রকাশের প্রস্তাব দেয়।
সাকিস্ক

6
নিয়মিত প্রকাশের জন্য আমার নিয়াম্বটি হ'ল: আপনার যদি নিয়মিত প্রকাশের মন্তব্য করতে হয় তবে এটি খুব জটিল।
zzzzBov

1
এবং সর্বদা এই লিঙ্কটি অন্তর্ভুক্ত করুন: regexcrossword.com
কিভেলি

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

উত্তর:


10

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


2
রেগেক্সারটি যে কোনও উপায়েই ঘটবে, যদি না ডেভ একটি রেজেক্স সাওয়ান্ত হয়। তবে আমি একটি সাধারণ বিবরণ প্রদানের সাথে একমত; এটাই আমি আমার রেজিজেসগুলির সাথে করি।
রবার্ট হার্ভে

3
+1: আরও বিস্তারিত যে কোনও কিছুই মন্তব্য হিসাবে রেজেক্সে ক্র্যাশ কোর্স হয়ে যাবে।
ম্যাট

এই উত্তর এবং @zzzzBov মন্তব্যগুলি অর্থবোধ করে।
এম0 নাহক

1
এটি বুঝতে কেবল নিয়মিত অভিব্যক্তির ক্লান্তিকর পরীক্ষার ঝামেলা বাঁচায় তা নয়, এটি মূল প্রোগ্রামারটির অভিপ্রায়কে স্পষ্ট করে তোলে, বিশেষত এটির স্বতন্ত্র সম্ভাবনা প্রদান করে যে মূল প্রোগ্রামার নিয়মিত প্রকাশটিই প্রথম সময়টির রাউন্ডে ভুল করে ফেলেছিল। বলার পরেও, অনেকগুলি ক্ষেত্রে রেগেক্সকে একটি ভাল ভেরিয়েবল নামের বরাদ্দকরণের উদ্দেশ্যটির পর্যাপ্ত ডকুমেন্টেশন সরবরাহের জন্য দীর্ঘ পথ গুনতে পারে।
ক্রেগ

9

এটি কিছুটা ভাষা নির্দিষ্ট উত্তর, তবে কোনও ভাষাই প্রশ্নটিতে বর্ণিত হয়নি।

"পাইথ ইন্ট পাইথন" বইটি ভার্বোজ নিয়মিত অভিব্যক্তি ব্যবহার করে মন্তব্যগুলি প্রয়োগ করার পরামর্শ দেয় :

পাইথন আপনাকে ভার্বোজ রেগুলার এক্সপ্রেশন বলে এমন কিছু দিয়ে এটি করতে দেয়। একটি ভারবস নিয়মিত প্রকাশ দুটিভাবে একটি কমপ্যাক্ট নিয়মিত প্রকাশের থেকে পৃথক:

  • সাদা স্থান উপেক্ষা করা হয়। স্পেস, ট্যাব এবং ক্যারেজের রিটার্নগুলি স্পেস, ট্যাব এবং ক্যারেজের রিটার্ন হিসাবে মিলছে না। তারা মোটেও মেলে না। (আপনি যদি কোনও ভারবস নিয়মিত অভিব্যক্তিতে কোনও জায়গার সাথে মিল রাখতে চান, আপনার সামনে একটি ব্যাকস্ল্যাশ রেখে আপনাকে এড়াতে হবে))
  • মন্তব্য উপেক্ষা করা হয়। একটি ভার্জোজ নিয়মিত প্রকাশের একটি মন্তব্য পাইথন কোডের একটি মন্তব্যের মতো: এটি একটি #অক্ষর দিয়ে শুরু হয় এবং লাইনটির শেষ অবধি চলে। এই ক্ষেত্রে এটি আপনার উত্স কোডের পরিবর্তে একাধিক-লাইনের স্ট্রিংয়ের মধ্যে একটি মন্তব্য, তবে এটি একইভাবে কাজ করে।

উদাহরণ:

>>> 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

উত্স এবং এখানে আরও বিশদ

এই পদ্ধতির সামান্য অসুবিধা রয়েছে যা কলকারী অবশ্যই জানতে হবে যে প্যাটার্নটি ভার্ভোজ ফর্ম্যাটে লেখা হয়েছে এবং সেই অনুযায়ী কল করুন।


2
কোনও ভেরিয়েবলে প্যাটার্নটি সংরক্ষণ করার পরিবর্তে আপনি re.compileযে বিন্দুটি নিজের প্যাটার্নটি সংজ্ঞায়িত করেন সেই স্থানে আপনি ব্যবহার করতে পারেন এবং ফলস্বরূপ বস্তুটি কেবলমাত্র সংরক্ষণ করতে পারেন। এইভাবে, প্যাটার্ন সংকলন পতাকাগুলি (সহ re.VERBOSE) নিজেই প্যাটার্ন থেকে পৃথক হওয়ার দরকার নেই।
জন বার্থলোমিউ

সত্যিই সহায়ক উত্তর, ধন্যবাদ! তবে আমি #ভার্বোজ পতাকাটি ব্যবহার করতে পারলে কীভাবে আমি মেলাতে পারি? উপায় দ্বারা: উত্স লিঙ্কগুলি ডাউন বলে মনে হচ্ছে।
উইঙ্কলারr

ঠিক আছে, #অক্ষর শ্রেণীর অভ্যন্তরে আক্ষরিক সাথে এটি মিলানো যেতে পারে: [#](উত্স: docs.python.org/3/library/re.html#re.X )
উইঙ্কলারের

8

সাধারণত, আমি একটি রেজেক্স লিখব এবং রেজেক্সের পৃথক টুকরো ব্যাখ্যা করব না, বরং এর উদ্দেশ্য কী। এই যে কি এবং কেন। এটি "আমার মন্তব্যগুলি দেখতে কেমন হওয়া উচিত?" জিজ্ঞাসার মতো কিছুটা যার মধ্যে কেউ বলবে " কোড কী করছে তা লিখবেন না, কোড কেন এটি করছে তা লিখুন "

// 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, "");

আপনি কোডে মন্তব্যের মাধ্যমে রেজিক্স সম্পর্কে কাউকে শেখানোর চেষ্টা না করা অবধি প্রতিটি পৃথক টুকরা কী করবে তা ব্যাখ্যা করার মতো আমি মনে করি না। অন্যান্য প্রোগ্রামারদের সাথে কাজ করার সময়, আপনি নিরাপদে ধরে নিতে পারেন যে কেউ বিশ্বব্যাপী নিয়মিত প্রকাশ হিসাবে কিছু জানতে পারে।


3
আপনি অবাক হবেন ...
ম্যাট

6

আমি অনুমান করি যে এটি আপনি কীভাবে একসাথে রেজেক্স স্থাপন করছেন তার উপর নির্ভর করে। সাধারণভাবে বলতে গেলে আমি মনে করি যে সত্যিকারের রেজেক্স স্ট্রিংয়ের মধ্যেই মন্তব্য রাখা ভাল ধারণা হবে (বেশিরভাগ পরিস্থিতিতেই সম্ভব নয়, যতদূর আমি জানি)) আপনার যদি সত্যিই কোনও নিয়মিত অভিব্যক্তির নির্দিষ্ট অংশটি মন্তব্য করতে হয় (আপনি কি কাউকে শেখানোর চেষ্টা করছেন?), তবে প্রতিটি অংশকে তাদের নিজস্ব লাইনে পৃথক স্ট্রিংয়ে বিভক্ত করুন এবং আপনার প্রোগ্রামিং ভাষার জন্য সাধারণ মন্তব্য প্রক্রিয়া ব্যবহার করে প্রতিটি লাইনে মন্তব্য করুন। অন্যথায়, প্লেনোলিজফের উত্তরটি বেশ ভাল।

উদাহরণ:

string myregex = "\s" // Match any whitespace once
+ "\n"  // Match one newline character
+ "[a-zA-Z]";  // Match any letter

4

আমি সাধারণত একটি স্ট্রিং ধ্রুবক সংজ্ঞায়িত করি যার নাম নিয়মিত প্রকাশের সামগ্রিক উদ্দেশ্য বর্ণনা করে।

উদাহরণ স্বরূপ:

const string FloatingPointNumberPattern = @"[-+]?[0-9]*\.?[0-9]+";

এটিকে বর্ণনা দেওয়ার জন্য আপনি এই ধ্রুবকের উপরে একটি মন্তব্য যুক্ত করতে পারেন তবে সাধারণত ধ্রুবক নামটিই যথেষ্ট be


1
এই উত্তরটি সম্পর্কে মত এক অতিরিক্ত জিনিস আমি একটির বেশি স্পট ব্যবহৃত হয়, অভিপ্রায় যে হয়েছে মন্তব্য করতে এটিতে কোন বিস্মরণ - খুব কাছাকাছি সম্পন্ন করা।
জে ট্রানা

3

কিছু পরিস্থিতিতে, বিকাশকারীরা তাদের সাধারণ ডোমেনের বাইরে পাঠ্যের সাথে মেলে নিয়মিত প্রকাশ করতে পারেন। আসল বিকাশকারীরা বিভিন্ন প্রান্তের ক্যাপচারগুলি প্রচুর পরিমাণে পুনরাবৃত্তি হতে পারে যা কেবলমাত্র সেই পুনরুক্তি প্রক্রিয়া থেকেই আবিষ্কার করা যেতে পারে। সুতরাং, পরবর্তী বিকাশকারীরা সাধারণ বিকাশকারীরা সাধারণ ক্ষেত্রে সচেতন থাকলেও মূল প্রবর্তক (গুলি) যেগুলি মোকাবেলা করেছেন তার অনেকগুলি বিষয় সম্পর্কে অবগত হতে পারে না।

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

এর নিকটবর্তী হওয়ার একটি উপায় এটি ধরে নেওয়া যে ভবিষ্যতের বিকাশকারীদের কেবল নিয়মিত ভাবগুলি কীভাবে কাজ করে তার মতো কেবল প্রাথমিক জ্ঞান থাকবে, তবে আপনার (1) নিয়মিত প্রকাশের বিকাশের আগে যে জ্ঞান ছিল তা অবশ্যই জানা ছিল না ভবিষ্যতের বিকাশকারীগণ বা (২) আপনার বিকাশের সময় আপনি যে জ্ঞান অর্জন করেছেন (যেমন, প্রান্তের যেগুলি সন্ধান করা হয়েছিল)।

উদাহরণস্বরূপ, যদি বিকাশের সময় আপনি "ওহ, আমি জানতাম না যে এক্স এই ফর্মটি নিতে পারে" এর মতো কিছু বলে থাকেন তবে এটি ডকুমেন্টিংয়ের পক্ষে (এবং সম্ভবত সেই বৈচিত্রটি পরিচালনা করে রেজেক্সের অংশ) worth


2

মন্তব্যগুলিতে দরকারী তথ্য যুক্ত করা উচিত যা কোড থেকে সুস্পষ্ট নয়।

  1. প্রয়োজনীয়তার স্তরে কোডটি নিজেই বা কোনও মন্তব্যে অভিব্যক্তিটি কী করা উচিত তা বুঝতে সহজ করুন। অভিব্যক্তির পিছনে উদ্দেশ্য কী, এটি ইমেল ঠিকানাগুলি যাচাই করা বা কানাডিয়ান ফোন নম্বরগুলি বেছে নেওয়া।
  2. এক্সপ্রেশনটি আসলে কী করছে অর্থাত্ ভাবটি কীভাবে মূল্যায়ণ করে তা বোঝা সহজ করুন। প্রথমে এক্সপ্রেশনটি বিভক্ত করে এটিকে পরিষ্কার করার চেষ্টা করুন, আপনি যদি প্রথমে সমস্ত হাইফেনগুলি পরীক্ষা করে থাকেন তবে সমস্ত সংখ্যা মুছে ফেলুন এবং তারপরে মধ্যস্থতার মানগুলিকে ধারণ করে চলকযুক্ত দুটি অংশের এক্সপ্রেশনটি এটি পড়া সহজতর করবে এবং পাঠক হবে আপনার যুক্তি দিয়ে একবারে এক পদক্ষেপে সক্ষম (এসই সম্পর্কে একটি প্রশ্নের উত্তর রয়েছে যেখানে কেউ কিছু পুরাতন কোডটি বোঝার চেষ্টা করছে যার মধ্যে বিট ম্যানিপুলেশন '>>' জড়িত রয়েছে এবং সুনির্দিষ্ট পতাকাগুলি সেট করা আছে কিনা যেখানে উত্তরটি কেবল কোডটি কী করবে না কেবল কীভাবে তা খুঁজে বের করবে কিনা তা সন্ধান করবে) প্রশ্নের লেখকের ভবিষ্যতে এই ধরণের কোডটি ডিকনস্ট্রাক্ট করা উচিত যা আমি বর্ণনা করার চেষ্টা করছি তবে আমি করতে পারি '

কয়েকটি সর্বশেষ চক্রের জন্য কয়েকটি অ্যাপ্লিকেশন রয়েছে যা আপনি যদি প্রচুর ডেটা সেটগুলির সাথে মিল রেখে প্যাটার্ন হন তবে সম্ভবত আরও ভাল উপায় আছে, নাও হতে পারে, তবে বেশিরভাগ ক্ষেত্রে অতিরিক্ত কার্যকর করার সময়টি এত বড় চুক্তি নয়।

এবং আপনার কোডটি পেরিয়ে পরবর্তী ব্যক্তির কথা মনে রাখবেন এবং ছয় মাসের মধ্যে কোনও বাগ আপনি ঠিক করতে পারেন এবং এটি করার কী ছিল তা আপনি মনে করার কোনও উপায় নেই।


1

একটি অর্থবোধক নাম সহ আলাদা শ্রেণিতে রেজিএক্সটি বের করুন। তারপরে আমি কোডটি স্বয়ংক্রিয় পরীক্ষার মাধ্যমে নথি করব।

এটি নিশ্চিত করবে

  • কোডটি আসলে কাজ করে - কোণার ক্ষেত্রেও
  • নিশ্চিত করে যে একটি দ্রুত "বাগফিক্স" অনেকগুলি কর্নারের কেস স্ক্রু করে না
  • ব্যাকট্র্যাকিং অক্ষম যেখানে ডকুমেন্ট অপ্টিমাইজেশন

স্বাভাবিকভাবেই, আপনার ক্লাসে বেশ কয়েকটি রেজেক্স হোস্ট করা যেতে পারে।

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