পাঠ্যতে কমা ও দশমিকের সাথে বা ছাড়াই সংখ্যাগুলির সাথে মেলে নিয়মিত প্রকাশ


100

আমি পাঠ্যের মূল অংশে সমস্ত সংখ্যা সনাক্ত এবং প্রতিস্থাপন করার চেষ্টা করছি। আমি কয়েকটি উদাহরণ পেয়েছি রেগেক্সের, যা প্রায় সমস্যার সমাধান করে, তবে কোনওটি এখনও নিখুঁত নয়। আমার সমস্যাটি হ'ল আমার পাঠ্যের সংখ্যাগুলিতে দশমিক এবং কমা থাকতে পারে। উদাহরণ স্বরূপ:

"5000 পাউন্ড শিয়াল একটি 99,999.99998713 ফুট বেড়ার উপরে লাফিয়ে উঠেছে" "

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

আমার সর্বশেষ সংস্করণটি এখানে:

[0-9]+(\.[0-9][0-9]?)?

উপরোক্ত পাঠ্যের জন্য যা " 5000", " 99,99", " 9.99" এবং " 998713" প্রদান করে।


4
কি প্রোগ্রামিং ভাষা বা রেইগেক্স গন্ধ?
ম্যাট বল

7
মনে হচ্ছে প্রায় প্রতিটি উত্তর এখানে ভালো জিনিস, যার ফলে এর ভুল মত .,.,.বা 9,9,9,9বা 9,9.99.9। এই রেজেক্সগুলি সংখ্যার যথাযথ ফর্ম্যাটে থাকতে হবে না এবং সবচেয়ে খারাপভাবে, বিরামচিহ্নগুলিকে সংখ্যা হিসাবে গণ্য করবে। কিছু alচ্ছিক সম্ভাব্য সম্ভাবনা রয়েছে (যেমন: শীর্ষস্থানীয় এবং অনুগ্রহপূর্ব শূন্যগুলি মঞ্জুরি দেওয়ার অনুমতি দেয় কিনা), তবে আমি যে উত্তরগুলি দেখছি সেগুলির কয়েকটি সম্পূর্ণরূপে ভুল। আমি ডাউনভোটিংটি বিশেষত সৎ প্রচেষ্টাতে পছন্দ করি না তবে এখানে উত্তরগুলি পরিষ্কার করা দরকার বলে আমার মনে হয়। এটি একটি সাধারণ প্রশ্ন এবং অবশ্যই আবার জিজ্ঞাসা করা হবে।
জাস্টিন মরগান 22

আপনি যদি এটিটি জানেন না, তবে রিজেক্সপাল.কমের
এন্টারনিও

দেরি করার জন্য দুঃখিত ম্যাট। আমি অ্যাডোবের অ্যাকশনস্ক্রিপ্ট ৩ ব্যবহার করছি I আমি ভেবেছিলাম যে রেইগেক্স আচরণটি জাভাস্ক্রিপ্টের মতোই, তবে আমি জেস্টিনের পরামর্শটি রিজেক্সপাল.কম এ পরীক্ষা করেছি এবং এটি আমার ফ্ল্যাশ অ্যাপ্লিকেশনের ফলাফলের সাথে তুলনা করেছি এবং দুটি ভিন্ন ফলাফল উভয়ই ভুল দেখেছি।

আমার নিজের পরীক্ষাগুলির উপর ভিত্তি করে এবার কাজ করা উচিত। এটির এখনও পরিশোধন প্রয়োজন কিনা তা আমাকে জানান।
জাস্টিন মরগান

উত্তর:


300

সম্পাদনা: যেহেতু এটি প্রচুর মতামত অর্জন করেছে, তাই প্রত্যেককে তারা কী গুগল করেছিল তা দিয়ে আমাকে শুরু করুন:

#ALL THESE REQUIRE THE WHOLE STRING TO BE A NUMBER
#For numbers embedded in sentences, see discussion below

#### NUMBERS AND DECIMALS ONLY ####
#No commas allowed
#Pass: (1000.0), (001), (.001)
#Fail: (1,000.0)
^\d*\.?\d+$

#No commas allowed
#Can't start with "."
#Pass: (0.01)
#Fail: (.01)
^(\d+\.)?\d+$

#### CURRENCY ####
#No commas allowed
#"$" optional
#Can't start with "."
#Either 0 or 2 decimal digits
#Pass: ($1000), (1.00), ($0.11)
#Fail: ($1.0), (1.), ($1.000), ($.11)
^\$?\d+(\.\d{2})?$

#### COMMA-GROUPED ####
#Commas required between powers of 1,000
#Can't start with "."
#Pass: (1,000,000), (0.001)
#Fail: (1000000), (1,00,00,00), (.001)
^\d{1,3}(,\d{3})*(\.\d+)?$

#Commas required
#Cannot be empty
#Pass: (1,000.100), (.001)
#Fail: (1000), ()
^(?=.)(\d{1,3}(,\d{3})*)?(\.\d+)?$

#Commas optional as long as they're consistent
#Can't start with "."
#Pass: (1,000,000), (1000000)
#Fail: (10000,000), (1,00,00)
^(\d+|\d{1,3}(,\d{3})*)(\.\d+)?$

#### LEADING AND TRAILING ZEROES ####
#No commas allowed
#Can't start with "."
#No leading zeroes in integer part
#Pass: (1.00), (0.00)
#Fail: (001)
^([1-9]\d*|0)(\.\d+)?$

#No commas allowed
#Can't start with "."
#No trailing zeroes in decimal part
#Pass: (1), (0.1)
#Fail: (1.00), (0.1000)
^\d+(\.\d*[1-9])?$

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


এটি একটি খুব সাধারণ কাজের, কিন্তু সব উত্তর আমি এখানে এতদূর দেখতে ইনপুট যেমন আপনার সংখ্যা বিন্যাস মিলছে না গ্রহণ করবে ,111, 9,9,9অথবা এমনকি .,,.। সংখ্যাগুলি অন্য পাঠ্যে এম্বেড থাকলেও এটি ঠিক করার পক্ষে যথেষ্ট সহজ। আইএমএইচও-র যে কোনও কিছু যা 1,234.56 এবং 1234 pull টানতে ব্যর্থ হয় এবং কেবলমাত্র এই সংখ্যাগুলি - এর abc22 1,234.56 9.9.9.9 def 1234একটি ভুল উত্তর।

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

বেসিক প্যাটার্ন

আপনি যে উদাহরণগুলি দিয়েছেন তা বিবেচনা করে, এখানে একটি সহজ রেজেক্স রয়েছে যা 0000বিন্যাসে কোনও পূর্ণসংখ্যার বা দশমিক दशক দেয় এবং অন্য সব কিছু অবরুদ্ধ করে:

^\d*\.?\d+$

এখানে 0,000ফর্ম্যাট দরকার এমন একটি :

^\d{1,3}(,\d{3})*(\.\d+)?$

এগুলি একসাথে রাখুন, এবং কমাগুলি যতক্ষণ না তারা সুসংগত হয় ততক্ষণ পর্যন্ত alচ্ছিক হয়ে ওঠে:

^(\d*\.?\d+|\d{1,3}(,\d{3})*(\.\d+)?)$

এম্বেড করা সংখ্যা

উপরের নিদর্শনগুলির জন্য একটি সংখ্যা হতে পুরো ইনপুট প্রয়োজন। আপনি পাঠ্যে এম্বেড থাকা সংখ্যাগুলি সন্ধান করছেন, সুতরাং আপনাকে সেই অংশটি আলগা করতে হবে। অন্যদিকে, আপনি এটি দেখতে catch22চেয়েছেন এবং এটি 22 নম্বর খুঁজে পেয়েছে তা মনে করতে চান না you're আপনি যদি লুকবিহীন সমর্থন (কিছু। নেট) দিয়ে কিছু ব্যবহার করেন তবে এটি বেশ সহজ: এর ^সাথে প্রতিস্থাপন করুন(?<!\S) এবং এর $সাথে(?!\S) এবং আপনি ভাল যাও:

(?<!\S)(\d*\.?\d+|\d{1,3}(,\d{3})*(\.\d+)?)(?!\S)

আপনি যদি জাভাস্ক্রিপ্ট বা রুবি বা অন্য কোনও কিছু নিয়ে কাজ করছেন তবে জিনিসগুলি আরও জটিল দেখায়:

(?:^|\s)(\d*\.?\d+|\d{1,3}(?:,\d{3})*(?:\.\d+)?)(?!\S)

আপনাকে ক্যাপচার গ্রুপগুলি ব্যবহার করতে হবে; নজরদারি সমর্থন ছাড়া আমি বিকল্পের কথা ভাবতে পারি না। আপনি যে নম্বরগুলি চান তা গ্রুপ 1 এ থাকবে (ধরে নিলে পুরো ম্যাচটি গ্রুপ 0)।

বৈধতা এবং আরও জটিল নিয়ম

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

  • খালি ইনপুট
  • শীর্ষস্থানীয় জিরো (উদাঃ 000123)
  • ট্রেলিং জিরো (উদাঃ 1.2340000)
  • দশমিক দশমিক দশমিক পয়েন্ট দিয়ে শুরু (যেমন .001 বিপরীতে 0.001)

এর নরকের জন্য, ধরে নেওয়া যাক আপনি প্রথম 3 টি ব্লক করতে চান তবে শেষটিকে অনুমতি দিন। তোমার কি করা উচিত? আমি আপনাকে বলব যে আপনার কী করা উচিত, আপনার প্রতিটি নিয়মের জন্য একটি আলাদা রেজেক্স ব্যবহার করা উচিত এবং ক্রমশ আপনার ম্যাচগুলি সঙ্কুচিত করা উচিত। তবে চ্যালেঞ্জের স্বার্থে, আপনি এখানে কীভাবে এক বিশাল প্যাটার্নে এটি করেন:

(?<!\S)(?=.)(0|([1-9](\d*|\d{0,2}(,\d{3})*)))?(\.\d*[1-9])?(?!\S)

এবং এর অর্থ এখানে:

(?<!\S) to (?!\S) #The whole match must be surrounded by either whitespace or line boundaries. So if you see something bogus like :;:9.:, ignore the 9.
(?=.)             #The whole thing can't be blank.

(                    #Rules for the integer part:
  0                  #1. The integer part could just be 0...
  |                  #
  [1-9]              #   ...otherwise, it can't have leading zeroes.
  (                  #
    \d*              #2. It could use no commas at all...
    |                #
    \d{0,2}(,\d{3})* #   ...or it could be comma-separated groups of 3 digits each.
  )                  # 
)?                   #3. Or there could be no integer part at all.

(       #Rules for the decimal part:
  \.    #1. It must start with a decimal point...
  \d*   #2. ...followed by a string of numeric digits only.
  [1-9] #3. It can't be just the decimal point, and it can't end in 0.
)?      #4. The whole decimal part is also optional. Remember, we checked at the beginning to make sure the whole thing wasn't blank.

এখানে পরীক্ষিত: http://rextester.com/YPG96786

এটি এর মতো জিনিসগুলিকে অনুমতি দেবে:

100,000
999.999
90.0009
1,000,023.999
0.111
.111
0

এটি এই জাতীয় জিনিসগুলিকে ব্লক করবে:

1,1,1.111
000,001.111
999.
0.
111.110000
1.1.1.111
9.909,888

এই রেজেক্সকে আরও সহজ এবং খাটো করার বেশ কয়েকটি উপায় রয়েছে তবে বুঝতে হবে যে প্যাটার্নটি পরিবর্তন করা এটি কোনও সংখ্যাকে বিবেচনা করে যা lিলা করবে।

যেহেতু অনেকগুলি রেজেক্স ইঞ্জিন (যেমন জাভাস্ক্রিপ্ট এবং রুবি) নেতিবাচক চেহারাটি সমর্থন করে না, তাই সঠিকভাবে এটি করার একমাত্র উপায় হ'ল ক্যাপচার গ্রুপগুলি সহ:

(:?^|\s)(?=.)((?:0|(?:[1-9](?:\d*|\d{0,2}(?:,\d{3})*)))?(?:\.\d*[1-9])?)(?!\S)

আপনি যে নম্বরগুলি খুঁজছেন তা ক্যাপচার গ্রুপ 1 এ থাকবে।

এখানে পরীক্ষিত: http://rubular.com/r/3HCSkndzhT

একটি চূড়ান্ত নোট

স্পষ্টতই, এটি একটি বিশাল, জটিল, নিকট-অপঠনযোগ্য রেজেক্স। আমি চ্যালেঞ্জটি উপভোগ করেছি, তবে আপনি এটি অবশ্যই উত্পাদন পরিবেশে এটি ব্যবহার করতে চান কিনা তা বিবেচনা করা উচিত এর পরিবর্তে এক ধাপ সবকিছু করতে চেষ্টা, আপনি এটিকে দুটি না পারে: কিছু ধরা করার জন্য একটি Regex যে পারে একটি নম্বর আউট যাই হোক না কেন আগাছা তাহলে অন্য এক হতে নয় একটি সংখ্যা। অথবা আপনি কিছু বেসিক প্রক্রিয়াজাতকরণ করতে পারেন, তারপরে আপনার ভাষার অন্তর্নির্মিত সংখ্যা পার্সিং ফাংশন ব্যবহার করুন। তোমার পছন্দ.


4
এটি একটি খুব ভাল প্রচেষ্টা, তবে এটির সাথে সমস্যা হতে পারে - ইঞ্জিনের লোভের উপর নির্ভর করে, একটি প্রদত্ত সংখ্যা আংশিকভাবে প্রতিযোগিতামূলক দুটি ফর্ম্যাটের সাথে মিলিয়ে দিতে পারে, এককভাবে সঠিকটির সাথে মিলে যাওয়ার ইন্সট্রাড - অর্থাৎ 5000 পেতে পারে 500 প্লাস 0 এটি আমাকে কেবলমাত্র একটি একক অভিব্যক্তি দিয়ে খুব বেশি toেকে রাখার চেষ্টা করার বিষয়ে একটু সন্দেহবাদী করে তোলে এবং সে কারণেই আমি সম্ভাব্য মিথ্যা ধনাত্মকতার সতর্কতার সাথে একটি সহজ উত্তর দিয়েছি। দিন শেষে, প্রয়োজনীয়তার কঠোরতার সমাধানটি নির্দেশ করতে হবে।
entonio

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

আমি অ্যাকশনস্ক্রিপ্ট ব্যবহার করছি, যা আমি বিশ্বাস করি জাভাস্ক্রিপ্টের মতোই আচরণ করে। আপনার প্রস্তাবিত প্রথম প্যাটার্নটি ব্যবহার করে, আমি আমার পরীক্ষার স্ট্রিংয়ে নিম্নলিখিত ফলাফলগুলি পেয়েছি (বৈধতার জন্য, আমি কেবল "<< [ফলাফল] >>" "এ আবৃত ম্যাচগুলি ফিরিয়ে দিচ্ছি): << 5 >> 000 পাউন্ড শিয়াল একটি << 9 >> 9 <<, 9 >> <<99>> <<। 9 >> <<99>> <<98>> <<71>> 3 ফুটের বেড়ার উপরে লাফিয়ে।

4
ঠিক আছে, আপনার আপের একটি ভোট আমার কাছ থেকে এসেছে :) যেমনটি আমি মনে করি আপনার উত্তরটি যতটা পেতে পারে ততই পুঙ্খানুপুঙ্খভাবে রয়েছে এবং আপনি এতে কাজ রেখেছেন। কেবল এটিকে একটি বিষয়বস্তু-মন্তব্য করার জন্য, ওপিকে একটি নোট,??: গোষ্ঠীগুলির শুরুতে এমন আছে যাতে তারা স্বতঃস্ফূর্তভাবে ফলাফলের ('বন্দী') না ফেরত আসে, যদিও তারা মিলতে অবদান রাখে? পুরো প্রকাশ; ইনপুটটিতে প্রতিটি ফর্ম্যাট করা নম্বর পুরো এক্সপ্রেশনটির সাথে মেলে।
এনটোনিও

@ মিশেল এবং @ এন্টোনিও - সর্বশেষতম সম্পাদনা দেখুন যা কার্যকর বলে মনে হচ্ছে। এটি উপস্থিত হওয়া থেকে আরও বেশি কঠিন এমন রিজেক্স সমস্যাগুলির মধ্যে একটি।
জাস্টিন মরগান

10

কিছু দিন আগে, আমি একটি সংখ্যার স্ট্রিং থেকে ট্রেলিং জিরোগুলি সরানোর সমস্যা নিয়ে কাজ করেছি ।

এই সমস্যার ধারাবাহিকতায় আমি এটিকে আকর্ষণীয় বলে মনে করি কারণ এটি কমা নিয়ে গঠিত সংখ্যায় সমস্যাটি আরও প্রশস্ত করে।

আমি যে পূর্ববর্তী সমস্যায় কাজ করেছি সেটিতে আমি রেজেক্সের প্যাটার্নটি নিয়েছি এবং আমি এটির উন্নতি করেছি যাতে এটি এই সমস্যার উত্তর হিসাবে কমা দিয়ে সংখ্যাগুলিকে আচরণ করতে পারে।

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

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

রেজেক্সটি এমনভাবে তৈরি করা হয়েছে যাতে এটি বৈজ্ঞানিক স্বরলিপি 2E10 বা 5,22,454.12E-00.0478 তে প্রকাশিত সংখ্যাগুলি সনাক্ত করতে পারে এবং এই জাতীয় সংখ্যার দুটি অংশে অপ্রয়োজনীয় শূন্যগুলিও সরিয়ে ফেলতে পারে। যদি কোনও সূচক শূন্যের সমান হয় তবে সংখ্যাটি এমনভাবে সংশোধন করা হয় যাতে আর কোনও এক্সপেন্ডেন্ট না থাকে।

আমি প্যাটার্নটিতে কিছু যাচাইকরণ রেখেছি যাতে কিছু বিশেষ কেস মেলে না, উদাহরণস্বরূপ '12 ..57 ' মেলে না। তবে ', 111' তে স্ট্রিং '111' মেলে কারণ পূর্ববর্তী কমাটি একটি কমা হিসাবে সংখ্যায় নয় বরং বাক্যটির কমা হিসাবে বিবেচিত হয়।

আমি মনে করি যে কমা পরিচালনার উন্নতি করা উচিত, কারণ আমার কাছে মনে হয় যে ভারতীয় সংখ্যায় কমাগুলির মধ্যে মাত্র 2 টি সংখ্যা রয়েছে। আমি মনে করি এটি সংশোধন করা পৃথক হবে না

এখানে আমার কোডটি কীভাবে কাজ করবে তা দেখানোর জন্য একটি কোড রয়েছে। সেখানে অনুযায়ী চায় ভাবেই নম্বরগুলি যদি দুটি ফাংশন হয়, '.1245' মধ্যে রূপান্তর করতে হবে তাকে '0,1245' বা না। যদি ত্রুটি বা অযাচিত মিল বা মিল না মেলে কিছু সংখ্যক স্ট্রিংয়ের ক্ষেত্রে আবশ্যক; তারপরে আমি ঘাটতি বুঝতে এবং সংশোধন করতে এই কেসগুলি জানতে চাই।

পাইথনে লেখা এই কোডটির জন্য আমি ক্ষমাপ্রার্থী, কিন্তু রেজেক্সসগুলি হ'ল ট্রান্স-ল্যাঙ্গেজ এবং আমি মনে করি প্রত্যেকে রেেক্সের প্যাটার্নকে আন্ডারসেটে সক্ষম করতে সক্ষম হবে

import re

regx = re.compile('(?<![\d.])(?!\.\.)(?<![\d.][eE][+-])(?<![\d.][eE])(?<!\d[.,])'
                  '' #---------------------------------
                  '([+-]?)'
                  '(?![\d,]*?\.[\d,]*?\.[\d,]*?)'
                  '(?:0|,(?=0)|(?<!\d),)*'
                  '(?:'
                  '((?:\d(?!\.[1-9])|,(?=\d))+)[.,]?'
                  '|\.(0)'
                  '|((?<!\.)\.\d+?)'
                  '|([\d,]+\.\d+?))'
                  '0*'
                  '' #---------------------------------
                  '(?:'
                  '([eE][+-]?)(?:0|,(?=0))*'
                  '(?:'
                  '(?!0+(?=\D|\Z))((?:\d(?!\.[1-9])|,(?=\d))+)[.,]?'
                  '|((?<!\.)\.(?!0+(?=\D|\Z))\d+?)'
                  '|([\d,]+\.(?!0+(?=\D|\Z))\d+?))'
                  '0*'
                  ')?'
                  '' #---------------------------------
                  '(?![.,]?\d)')


def dzs_numbs(x,regx = regx): # ds = detect and zeros-shave
    if not regx.findall(x):
        yield ('No match,', 'No catched string,', 'No groups.')
    for mat in regx.finditer(x):
        yield (mat.group(), ''.join(mat.groups('')), mat.groups(''))

def dzs_numbs2(x,regx = regx): # ds = detect and zeros-shave
    if not regx.findall(x):
        yield ('No match,', 'No catched string,', 'No groups.')
    for mat in regx.finditer(x):
        yield (mat.group(),
               ''.join(('0' if n.startswith('.') else '')+n for n in mat.groups('')),
               mat.groups(''))

NS = ['  23456000and23456000. or23456000.000  00023456000 s000023456000.  000023456000.000 ',
      'arf 10000 sea10000.+10000.000  00010000-00010000. kant00010000.000 ',
      '  24:  24,  24.   24.000  24.000,   00024r 00024. blue 00024.000  ',
      '  8zoom8.  8.000  0008  0008. and0008.000  ',
      '  0   00000M0. = 000.  0.0  0.000    000.0   000.000   .000000   .0   ',
      '  .0000023456    .0000023456000   '
      '  .0005872    .0005872000   .00503   .00503000   ',
      '  .068    .0680000   .8   .8000  .123456123456    .123456123456000    ',
      '  .657   .657000   .45    .4500000   .7    .70000  0.0000023230000   000.0000023230000   ',
      '  0.0081000    0000.0081000  0.059000   0000.059000     ',
      '  0.78987400000 snow  00000.78987400000  0.4400000   00000.4400000   ',
      '  -0.5000  -0000.5000   0.90   000.90   0.7   000.7   ',
      '  2.6    00002.6   00002.60000  4.71   0004.71    0004.7100   ',
      '  23.49   00023.49   00023.490000  103.45   0000103.45   0000103.45000    ',
      '  10003.45067   000010003.45067   000010003.4506700 ',
      '  +15000.0012   +000015000.0012   +000015000.0012000    ',
      '  78000.89   000078000.89   000078000.89000    ',
      '  .0457e10   .0457000e10   00000.0457000e10  ',
      '   258e8   2580000e4   0000000002580000e4   ',
      '  0.782e10   0000.782e10   0000.7820000e10  ',
      '  1.23E2   0001.23E2  0001.2300000E2   ',
      '  432e-102  0000432e-102   004320000e-106   ',
      '  1.46e10and0001.46e10  0001.4600000e10   ',
      '  1.077e-300  0001.077e-300  0001.077000e-300   ',
      '  1.069e10   0001.069e10   0001.069000e10   ',
      '  105040.03e10  000105040.03e10  105040.0300e10    ',
      '  +286E000024.487900  -78.4500e.14500   .0140E789.  ',
      '  081,12.40E07,95.0120     0045,78,123.03500e-0.00  ',
      '  0096,78,473.0380e-0.    0008,78,373.066000E0.    0004512300.E0000  ',
      '  ..18000  25..00 36...77   2..8  ',
      '  3.8..9    .12500.     12.51.400  ',
      '  00099,111.8713000   -0012,45,83,987.26+0.000,099,88,44.or00,00,00.00must',
      '  00099,44,and   0000,099,88,44.bom',
      '00,000,00.587000  77,98,23,45.,  this,that ',
      '  ,111  145.20  +9,9,9  0012800  .,,.  1  100,000 ',
      '1,1,1.111  000,001.111   -999.  0.  111.110000  1.1.1.111  9.909,888']


for ch in NS:
    print 'string: '+repr(ch)
    for strmatch, modified, the_groups in dzs_numbs2(ch):
        print strmatch.rjust(20),'',modified,'',the_groups
    print

ফলাফল

string: '  23456000and23456000. or23456000.000  00023456000 s000023456000.  000023456000.000 '
            23456000  23456000  ('', '23456000', '', '', '', '', '', '', '')
           23456000.  23456000  ('', '23456000', '', '', '', '', '', '', '')
        23456000.000  23456000  ('', '23456000', '', '', '', '', '', '', '')
         00023456000  23456000  ('', '23456000', '', '', '', '', '', '', '')
       000023456000.  23456000  ('', '23456000', '', '', '', '', '', '', '')
    000023456000.000  23456000  ('', '23456000', '', '', '', '', '', '', '')

string: 'arf 10000 sea10000.+10000.000  00010000-00010000. kant00010000.000 '
               10000  10000  ('', '10000', '', '', '', '', '', '', '')
              10000.  10000  ('', '10000', '', '', '', '', '', '', '')
           10000.000  10000  ('', '10000', '', '', '', '', '', '', '')
            00010000  10000  ('', '10000', '', '', '', '', '', '', '')
           00010000.  10000  ('', '10000', '', '', '', '', '', '', '')
        00010000.000  10000  ('', '10000', '', '', '', '', '', '', '')

string: '  24:  24,  24.   24.000  24.000,   00024r 00024. blue 00024.000  '
                  24  24  ('', '24', '', '', '', '', '', '', '')
                 24,  24  ('', '24', '', '', '', '', '', '', '')
                 24.  24  ('', '24', '', '', '', '', '', '', '')
              24.000  24  ('', '24', '', '', '', '', '', '', '')
              24.000  24  ('', '24', '', '', '', '', '', '', '')
               00024  24  ('', '24', '', '', '', '', '', '', '')
              00024.  24  ('', '24', '', '', '', '', '', '', '')
           00024.000  24  ('', '24', '', '', '', '', '', '', '')

string: '  8zoom8.  8.000  0008  0008. and0008.000  '
                   8  8  ('', '8', '', '', '', '', '', '', '')
                  8.  8  ('', '8', '', '', '', '', '', '', '')
               8.000  8  ('', '8', '', '', '', '', '', '', '')
                0008  8  ('', '8', '', '', '', '', '', '', '')
               0008.  8  ('', '8', '', '', '', '', '', '', '')
            0008.000  8  ('', '8', '', '', '', '', '', '', '')

string: '  0   00000M0. = 000.  0.0  0.000    000.0   000.000   .000000   .0   '
                   0  0  ('', '0', '', '', '', '', '', '', '')
               00000  0  ('', '0', '', '', '', '', '', '', '')
                  0.  0  ('', '0', '', '', '', '', '', '', '')
                000.  0  ('', '0', '', '', '', '', '', '', '')
                 0.0  0  ('', '', '0', '', '', '', '', '', '')
               0.000  0  ('', '', '0', '', '', '', '', '', '')
               000.0  0  ('', '', '0', '', '', '', '', '', '')
             000.000  0  ('', '', '0', '', '', '', '', '', '')
             .000000  0  ('', '', '0', '', '', '', '', '', '')
                  .0  0  ('', '', '0', '', '', '', '', '', '')

string: '  .0000023456    .0000023456000     .0005872    .0005872000   .00503   .00503000   '
         .0000023456  0.0000023456  ('', '', '', '.0000023456', '', '', '', '', '')
      .0000023456000  0.0000023456  ('', '', '', '.0000023456', '', '', '', '', '')
            .0005872  0.0005872  ('', '', '', '.0005872', '', '', '', '', '')
         .0005872000  0.0005872  ('', '', '', '.0005872', '', '', '', '', '')
              .00503  0.00503  ('', '', '', '.00503', '', '', '', '', '')
           .00503000  0.00503  ('', '', '', '.00503', '', '', '', '', '')

string: '  .068    .0680000   .8   .8000  .123456123456    .123456123456000    '
                .068  0.068  ('', '', '', '.068', '', '', '', '', '')
            .0680000  0.068  ('', '', '', '.068', '', '', '', '', '')
                  .8  0.8  ('', '', '', '.8', '', '', '', '', '')
               .8000  0.8  ('', '', '', '.8', '', '', '', '', '')
       .123456123456  0.123456123456  ('', '', '', '.123456123456', '', '', '', '', '')
    .123456123456000  0.123456123456  ('', '', '', '.123456123456', '', '', '', '', '')

string: '  .657   .657000   .45    .4500000   .7    .70000  0.0000023230000   000.0000023230000   '
                .657  0.657  ('', '', '', '.657', '', '', '', '', '')
             .657000  0.657  ('', '', '', '.657', '', '', '', '', '')
                 .45  0.45  ('', '', '', '.45', '', '', '', '', '')
            .4500000  0.45  ('', '', '', '.45', '', '', '', '', '')
                  .7  0.7  ('', '', '', '.7', '', '', '', '', '')
              .70000  0.7  ('', '', '', '.7', '', '', '', '', '')
     0.0000023230000  0.000002323  ('', '', '', '.000002323', '', '', '', '', '')
   000.0000023230000  0.000002323  ('', '', '', '.000002323', '', '', '', '', '')

string: '  0.0081000    0000.0081000  0.059000   0000.059000     '
           0.0081000  0.0081  ('', '', '', '.0081', '', '', '', '', '')
        0000.0081000  0.0081  ('', '', '', '.0081', '', '', '', '', '')
            0.059000  0.059  ('', '', '', '.059', '', '', '', '', '')
         0000.059000  0.059  ('', '', '', '.059', '', '', '', '', '')

string: '  0.78987400000 snow  00000.78987400000  0.4400000   00000.4400000   '
       0.78987400000  0.789874  ('', '', '', '.789874', '', '', '', '', '')
   00000.78987400000  0.789874  ('', '', '', '.789874', '', '', '', '', '')
           0.4400000  0.44  ('', '', '', '.44', '', '', '', '', '')
       00000.4400000  0.44  ('', '', '', '.44', '', '', '', '', '')

string: '  -0.5000  -0000.5000   0.90   000.90   0.7   000.7   '
             -0.5000  -0.5  ('-', '', '', '.5', '', '', '', '', '')
          -0000.5000  -0.5  ('-', '', '', '.5', '', '', '', '', '')
                0.90  0.9  ('', '', '', '.9', '', '', '', '', '')
              000.90  0.9  ('', '', '', '.9', '', '', '', '', '')
                 0.7  0.7  ('', '', '', '.7', '', '', '', '', '')
               000.7  0.7  ('', '', '', '.7', '', '', '', '', '')

string: '  2.6    00002.6   00002.60000  4.71   0004.71    0004.7100   '
                 2.6  2.6  ('', '', '', '', '2.6', '', '', '', '')
             00002.6  2.6  ('', '', '', '', '2.6', '', '', '', '')
         00002.60000  2.6  ('', '', '', '', '2.6', '', '', '', '')
                4.71  4.71  ('', '', '', '', '4.71', '', '', '', '')
             0004.71  4.71  ('', '', '', '', '4.71', '', '', '', '')
           0004.7100  4.71  ('', '', '', '', '4.71', '', '', '', '')

string: '  23.49   00023.49   00023.490000  103.45   0000103.45   0000103.45000    '
               23.49  23.49  ('', '', '', '', '23.49', '', '', '', '')
            00023.49  23.49  ('', '', '', '', '23.49', '', '', '', '')
        00023.490000  23.49  ('', '', '', '', '23.49', '', '', '', '')
              103.45  103.45  ('', '', '', '', '103.45', '', '', '', '')
          0000103.45  103.45  ('', '', '', '', '103.45', '', '', '', '')
       0000103.45000  103.45  ('', '', '', '', '103.45', '', '', '', '')

string: '  10003.45067   000010003.45067   000010003.4506700 '
         10003.45067  10003.45067  ('', '', '', '', '10003.45067', '', '', '', '')
     000010003.45067  10003.45067  ('', '', '', '', '10003.45067', '', '', '', '')
   000010003.4506700  10003.45067  ('', '', '', '', '10003.45067', '', '', '', '')

string: '  +15000.0012   +000015000.0012   +000015000.0012000    '
         +15000.0012  +15000.0012  ('+', '', '', '', '15000.0012', '', '', '', '')
     +000015000.0012  +15000.0012  ('+', '', '', '', '15000.0012', '', '', '', '')
  +000015000.0012000  +15000.0012  ('+', '', '', '', '15000.0012', '', '', '', '')

string: '  78000.89   000078000.89   000078000.89000    '
            78000.89  78000.89  ('', '', '', '', '78000.89', '', '', '', '')
        000078000.89  78000.89  ('', '', '', '', '78000.89', '', '', '', '')
     000078000.89000  78000.89  ('', '', '', '', '78000.89', '', '', '', '')

string: '  .0457e10   .0457000e10   00000.0457000e10  '
            .0457e10  0.0457e10  ('', '', '', '.0457', '', 'e', '10', '', '')
         .0457000e10  0.0457e10  ('', '', '', '.0457', '', 'e', '10', '', '')
    00000.0457000e10  0.0457e10  ('', '', '', '.0457', '', 'e', '10', '', '')

string: '   258e8   2580000e4   0000000002580000e4   '
               258e8  258e8  ('', '258', '', '', '', 'e', '8', '', '')
           2580000e4  2580000e4  ('', '2580000', '', '', '', 'e', '4', '', '')
  0000000002580000e4  2580000e4  ('', '2580000', '', '', '', 'e', '4', '', '')

string: '  0.782e10   0000.782e10   0000.7820000e10  '
            0.782e10  0.782e10  ('', '', '', '.782', '', 'e', '10', '', '')
         0000.782e10  0.782e10  ('', '', '', '.782', '', 'e', '10', '', '')
     0000.7820000e10  0.782e10  ('', '', '', '.782', '', 'e', '10', '', '')

string: '  1.23E2   0001.23E2  0001.2300000E2   '
              1.23E2  1.23E2  ('', '', '', '', '1.23', 'E', '2', '', '')
           0001.23E2  1.23E2  ('', '', '', '', '1.23', 'E', '2', '', '')
      0001.2300000E2  1.23E2  ('', '', '', '', '1.23', 'E', '2', '', '')

string: '  432e-102  0000432e-102   004320000e-106   '
            432e-102  432e-102  ('', '432', '', '', '', 'e-', '102', '', '')
        0000432e-102  432e-102  ('', '432', '', '', '', 'e-', '102', '', '')
      004320000e-106  4320000e-106  ('', '4320000', '', '', '', 'e-', '106', '', '')

string: '  1.46e10and0001.46e10  0001.4600000e10   '
             1.46e10  1.46e10  ('', '', '', '', '1.46', 'e', '10', '', '')
          0001.46e10  1.46e10  ('', '', '', '', '1.46', 'e', '10', '', '')
     0001.4600000e10  1.46e10  ('', '', '', '', '1.46', 'e', '10', '', '')

string: '  1.077e-300  0001.077e-300  0001.077000e-300   '
          1.077e-300  1.077e-300  ('', '', '', '', '1.077', 'e-', '300', '', '')
       0001.077e-300  1.077e-300  ('', '', '', '', '1.077', 'e-', '300', '', '')
    0001.077000e-300  1.077e-300  ('', '', '', '', '1.077', 'e-', '300', '', '')

string: '  1.069e10   0001.069e10   0001.069000e10   '
            1.069e10  1.069e10  ('', '', '', '', '1.069', 'e', '10', '', '')
         0001.069e10  1.069e10  ('', '', '', '', '1.069', 'e', '10', '', '')
      0001.069000e10  1.069e10  ('', '', '', '', '1.069', 'e', '10', '', '')

string: '  105040.03e10  000105040.03e10  105040.0300e10    '
        105040.03e10  105040.03e10  ('', '', '', '', '105040.03', 'e', '10', '', '')
     000105040.03e10  105040.03e10  ('', '', '', '', '105040.03', 'e', '10', '', '')
      105040.0300e10  105040.03e10  ('', '', '', '', '105040.03', 'e', '10', '', '')

string: '  +286E000024.487900  -78.4500e.14500   .0140E789.  '
  +286E000024.487900  +286E24.4879  ('+', '286', '', '', '', 'E', '', '', '24.4879')
     -78.4500e.14500  -78.45e0.145  ('-', '', '', '', '78.45', 'e', '', '.145', '')
          .0140E789.  0.014E789  ('', '', '', '.014', '', 'E', '789', '', '')

string: '  081,12.40E07,95.0120     0045,78,123.03500e-0.00  '
081,12.40E07,95.0120  81,12.4E7,95.012  ('', '', '', '', '81,12.4', 'E', '', '', '7,95.012')
   0045,78,123.03500  45,78,123.035  ('', '', '', '', '45,78,123.035', '', '', '', '')

string: '  0096,78,473.0380e-0.    0008,78,373.066000E0.    0004512300.E0000  '
    0096,78,473.0380  96,78,473.038  ('', '', '', '', '96,78,473.038', '', '', '', '')
  0008,78,373.066000  8,78,373.066  ('', '', '', '', '8,78,373.066', '', '', '', '')
         0004512300.  4512300  ('', '4512300', '', '', '', '', '', '', '')

string: '  ..18000  25..00 36...77   2..8  '
           No match,  No catched string,  No groups.

string: '  3.8..9    .12500.     12.51.400  '
           No match,  No catched string,  No groups.

string: '  00099,111.8713000   -0012,45,83,987.26+0.000,099,88,44.or00,00,00.00must'
   00099,111.8713000  99,111.8713  ('', '', '', '', '99,111.8713', '', '', '', '')
  -0012,45,83,987.26  -12,45,83,987.26  ('-', '', '', '', '12,45,83,987.26', '', '', '', '')
         00,00,00.00  0  ('', '', '0', '', '', '', '', '', '')

string: '  00099,44,and   0000,099,88,44.bom'
           00099,44,  99,44  ('', '99,44', '', '', '', '', '', '', '')
     0000,099,88,44.  99,88,44  ('', '99,88,44', '', '', '', '', '', '', '')

string: '00,000,00.587000  77,98,23,45.,  this,that '
    00,000,00.587000  0.587  ('', '', '', '.587', '', '', '', '', '')
        77,98,23,45.  77,98,23,45  ('', '77,98,23,45', '', '', '', '', '', '', '')

string: '  ,111  145.20  +9,9,9  0012800  .,,.  1  100,000 '
                ,111  111  ('', '111', '', '', '', '', '', '', '')
              145.20  145.2  ('', '', '', '', '145.2', '', '', '', '')
              +9,9,9  +9,9,9  ('+', '9,9,9', '', '', '', '', '', '', '')
             0012800  12800  ('', '12800', '', '', '', '', '', '', '')
                   1  1  ('', '1', '', '', '', '', '', '', '')
             100,000  100,000  ('', '100,000', '', '', '', '', '', '', '')

string: '1,1,1.111  000,001.111   -999.  0.  111.110000  1.1.1.111  9.909,888'
           1,1,1.111  1,1,1.111  ('', '', '', '', '1,1,1.111', '', '', '', '')
         000,001.111  1.111  ('', '', '', '', '1.111', '', '', '', '')
               -999.  -999  ('-', '999', '', '', '', '', '', '', '')
                  0.  0  ('', '0', '', '', '', '', '', '', '')
          111.110000  111.11  ('', '', '', '', '111.11', '', '', '', '')

9

নীচের রেজেক্সগুলি আপনার উদাহরণ থেকে উভয় সংখ্যার সাথে মিলবে।

\b\d[\d,.]*\b

এটি 5000 এবং 99,999.99998713 - আপনার প্রয়োজনীয়তার সাথে মিলবে।


4
এটি কমাতে মেলে this,that
জাস্টিন মরগান 21

@ জাস্টিন মরগান - আপনি সঠিক, আমি এই শর্তটির জন্য পরীক্ষা করিনি। এখানে একটি আপডেট সংস্করণ রয়েছে যা একটি কমা বা সময়কাল থেকে শুরু হওয়া সংখ্যা ব্যতীত সমস্ত ক্ষেত্রে কেটে যাবে। \b\d[\d,.]+\b
লিওনস

আরও ভাল, তবে এটি এখনও অনুমতি দেবে 9....9বা 1,,,,X(যদিও এক্স ম্যাচে অন্তর্ভুক্ত হবে না)।
জাস্টিন মরগান

4
যাইহোক, \b\d[\d,.]*\bযথেষ্ট কাছে যে আপনি নিজের উত্তরটি সম্পাদনা করলে আমি -1 মুছে ফেলব। এটি + এর পরিবর্তে * হওয়া উচিত; \b\d[\d,.]+\bএকক-সংখ্যা সংখ্যার অনুমতি দেবে না।
জাস্টিন মরগান 12

@ জাস্টিন মরগান - অন্তর্দৃষ্টি জন্য ধন্যবাদ। এই প্রশ্নটি উপস্থিত হওয়ার চেয়ে অবশ্যই জটিল ছিল। আমি আপনার প্রতিক্রিয়ার ভিত্তিতে আমার উত্তর আপডেট করেছি - এটি অর্থবোধ করে।
লেওন

3

প্রয়োজনীয়তা সহ একটি নির্দিষ্ট স্বাধীনতা গ্রহণ, আপনি খুঁজছেন

\d+([\d,]?\d)*(\.\d+)?

তবে লক্ষ্য করুন এটি 11,11,1 এর সাথে মিলবে


কৌতূহলের বাইরে, এর \d+([\d,]?\d)*(\.\d+)?বদলে আপনি কি কোনও কারণ নিয়ে গেছেন \d+(,\d+)*(\.\d+)?? আমি মনে করি তারা সমতুল্য ম্যাচগুলি দিত, যদিও ক্যাপচার গ্রুপগুলি আলাদা হত।
জাস্টিন মরগান

ওহে. কোনও বিশেষ কারণ নয়, এটি অবৈধ ফর্ম্যাটগুলির সাথে মেলে না দেওয়ার জন্য আরও জটিল অভিব্যক্তি দিয়ে শুরু করা থেকে বিরত ছিল।
entonio

3
\d+(,\d+)*(\.\d+)?

এটি ধরে নেওয়া হয় যে কোনও কমা বা দশমিকের আগে বা তার পরে সর্বদা কমপক্ষে একটি অঙ্ক থাকে এবং এটিও ধরে নেওয়া হয় যে একটি দশমিকেরও কমপক্ষে রয়েছে এবং সমস্ত কমা দশমিকের আগে।


4
এটি কমা গোষ্ঠীগুলিকে 3-সংখ্যার বিন্যাসে সীমাবদ্ধ করে না। এটা গ্রহণ করবে 999999,9,9,9,9
জাস্টিন মরগান

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

এটি আরই যা আমি ব্যবহার করব, যদিও এর পরে অন্য বৈধতা পদক্ষেপ নিয়ে (সম্ভবত আরইআর দিয়ে নয়); এক আর ই এর সাথে সবকিছু করার চেষ্টা করা জীবনকে আরও শক্ত করে তোলে।
ডোনাল ফেলো

@ জাস্টিন মরগান এটি পরিষ্কার ছিল না যে কমাটি কেবলমাত্র তিন-অঙ্কের গ্রুপগুলিতে গৃহীত হয়েছিল। তবে এটি সহজেই আমার অনুমান পরিবর্তন (,\d+)করে সমাধান করা হয়েছে (,\d\d\d)
নিল

2

এই রেজেক্স:

(\d{1,3},\d{3}(,\d{3})*)(\.\d*)?|\d+\.?\d*

স্ট্রিংয়ের প্রতিটি সংখ্যার সাথে মেলে:

1 1.0 0.1 1.001 1,000,000,000 1000.1 1,000.1 1,323,444,000 1,999 1,222,455,666.0 1,244


2

এখানে একটি রেজেক্স রয়েছে:

(?:\d+)((\d{1,3})*([\,\ ]\d{3})*)(\.\d+)?

যে সংখ্যা গ্রহণ করে:

  • শূন্যস্থান এবং / বা দশমিক ছাড়াই, যেমন। 123456789,123.123
  • হাজার হাজার বিভাজক এবং / বা দশমিক হিসাবে কমা বা স্পেস সহ, যেমন। 123 456 789, 123 456 789.100, 123,456,3,232,300,000.00

পরীক্ষা: http://regexr.com/3h1a2


এটি regexr.com এ দুর্দান্ত কাজ করে তবে পাইথন রে মডিউলে এটি কাজ করছে না
পার্ধু

1

এখানে আরও একটি নির্মাণ রয়েছে যা সহজ সংখ্যার ফর্ম্যাট দিয়ে শুরু হয় এবং তারপরে একটি অ-ওভারল্যাপিং পদ্ধতিতে, ক্রমবর্ধমান আরও জটিল সংখ্যার ফর্ম্যাট যুক্ত করে:

জাভা রেজিপ:

(\d)|([1-9]\d+)|(\.\d+)|(\d\.\d*)|([1-9]\d+\.\d*)|([1-9]\d{0,2}(,\d{3})+(\.\d*)?)

জাভা স্ট্রিং হিসাবে (অতিরিক্ত note এবং পালানোর জন্য প্রয়োজনীয় note এবং। যেহেতু note এবং নিজেরাই যখন পুনরায় প্রকাশের বিশেষ অর্থ রয়েছে নোট করুন):

String myregexp="(\\d)|([1-9]\\d+)|(\\.\\d+)|(\\d\\.\\d*)|([1-9]\\d+\\.\\d*)|([1-9]\\d{0,2}(,\\d{3})+(\\.\\d*)?)";   

ব্যাখ্যা:

  1. এই regexp ফর্মটি A | B | C | D | E | F যেখানে এ, বি, সি, ডি, ই, এফ হয় সেগুলি নিজেরাই রেজিেক্সপস যা ওভারল্যাপ হয় না। সাধারণত, আমি সবচেয়ে সহজ সম্ভাব্য ম্যাচগুলির সাথে শুরু করাকে আরও সহজ বলে মনে করি, একটি। যদি আপনি চান মেলে না, তবে একটি বি তৈরি করুন যা এ এর ​​একটি ছোটখাটো পরিবর্তন এবং আপনি যা চান তার কিছুটা অন্তর্ভুক্ত করে। তারপরে, বি এর উপর ভিত্তি করে, একটি সি তৈরি করুন যা আরও বেশি ক্যাচ করে etc. ইত্যাদি। আমি ওভারল্যাপ না করে এমন রিজেক্সপগুলি তৈরি করা আরও সহজ মনে করি; আরও জটিল মিলের সাথে কয়েকটি রিজেক্সের চেয়ে ওআরএস এর সাথে সংযুক্ত 20 টি সাধারণ নন-ওভারল্যাপিং রিজেক্সপস সহ একটি রেজিএক্সপাকে বোঝা আরও সহজ। কিন্তু, প্রতিটি তাদের নিজস্ব!

  2. A হ'ল () d) এবং 0,1,2,3,4,5,6,7,8,9 এর সাথে একের সাথে মিলছে যা সহজ হতে পারে না!

  3. বি হল ([1-9] \ d +) এবং কেবল 2 বা ততোধিক সংখ্যার সাথে সংখ্যাগুলি মেলে, প্রথমটি 0 বাদে ing বি 10,11,12 এর মধ্যে একটির সাথে মেলে, ... বি এটিকে ওভারল্যাপ করে না তবে এটি এ এর ​​একটি ছোট পরিবর্তন ification

  4. সি হল (। \ D +) এবং এক বা একাধিক সংখ্যার পরে দশমিকের সাথে মেলে। সি .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .00 .01 .02 ... এর ঠিক একটির সাথে মেলে। .23000 ... সি আমি ডানদিকে অগ্রগামী এরোগুলি অনুমতি দেয় যা আমি পছন্দ করি: এটি যদি পরিমাপের ডেটা হয় তবে পিছনের শূন্যগুলির সংখ্যা যথাযথতার স্তর নির্দেশ করে। আপনি যদি ডানদিকে চলার শূন্যগুলি না চান তবে (। \ D +) থেকে (। \ D * [1-9]) এ পরিবর্তন করুন তবে এটিও বাদ দেয় না 0 যা আমি মনে করি অনুমতি দেওয়া উচিত। সি এ এর ​​একটি ছোট্ট পরিবর্তনও is

  5. ডি হ'ল (\ d। \ D *) যা ডানদিকে পিছনের জিরো সহ একটি প্লাস দশমিক। ডি কেবলমাত্র একক অঙ্কের সাথে মিলে যায়, তার পরে দশমিক এবং তার পরে শূন্য বা আরও বেশি সংখ্যার হয়। ডি মিলছে 0. 0.0 0.1 0.2 .... 0.01000 ... 9। 9.0 9.1..0.0230000 .... 9.9999999999 ... আপনি যদি "0." বাদ দিতে চান তারপরে ডি পরিবর্তন করুন (\ d। \ d +)। আপনি যদি ডানদিকে ট্রেলিং শূন্যগুলি বাদ দিতে চান তবে ডি পরিবর্তন করুন (\ d। \ D * [1-9]) তবে এটি ২.০ বাদ দেয় যা আমার মনে হয় এটি অন্তর্ভুক্ত করা উচিত। ডি এ, বি, বা সি ওভারল্যাপ করে না

  6. E হল ([1-9] \ d +। \ D *) যা বি প্লাস ডেসিমাল যা ডানদিকে পিছনে শূন্য সহ। উদাহরণস্বরূপ, আপনি যদি "13." বাদ দিতে চান তবে ই-তে পরিবর্তন করুন ([1-9] \ d +। \ D +)। E, A, B, C বা D. E এর সাথে মেলে না 10 ই 10. 10.0 10.0100 .... 99.9999999999 ... ট্রেলিং জিরোগুলি 4. এবং 5 এর মতো পরিচালনা করা যায়।

  7. এফ হ'ল ([1-9] \ d {0,2} (, \ d {3}) + (। \ D *)?) এবং কেবলমাত্র কমা এবং সম্ভবত দশমিকের সাথে ডানদিকে পিছনে শূন্যকে অনুমতি দেয়। প্রথম গোষ্ঠী ([1-9] \ d {0,2}) একটি শূন্য-অংকের সাথে মেলে শূন্য, এক বা আরও দুটি সংখ্যার পরে। দ্বিতীয় গোষ্ঠী (, \ d {3 +) + একটি 4 টি চরিত্রের গ্রুপের সাথে মিলিত হয় (একটি কমা যার পরে ঠিক তিনটি অঙ্ক থাকে) এবং এই গোষ্ঠীটি এক বা একাধিকবার মেলতে পারে (কোনও ম্যাচ মানেই কমা নয়!)। অবশেষে, (। \ D *)? কিছুই মিলছে না, বা মিলছে না matches নিজেই, বা দশমিকের সাথে মেলে। সংখ্যার সংখ্যা অনুসরণ করে, সম্ভবত কোনওটিই নয়। আবার, "1,111।" এর মতো জিনিসগুলি বাদ দিতে, (। \ D *) থেকে (। \ D +) পরিবর্তন করুন। ট্রেলিং শূন্যগুলি 4 বা 5 এর মতো পরিচালনা করা যায় F এ, বি, সি, ডি, বা ই ওভারল্যাপ করে না F

আপনার আগ্রহী কিনা তা আমাকে জানান এবং আমি উপরেরটি সম্পাদনা করতে ডানদিকে পছন্দসই শিরোনামগুলি সম্পাদনা করতে পারি।

রেজিপক্সের সাথে কী মিলছে এবং কী মিলছে না তা এখানে:

0
1
02 <- invalid
20
22
003 <- invalid
030 <- invalid
300
033 <- invalid
303
330
333
0004 <- invalid
0040 <- invalid
0400 <- invalid
4000
0044 <- invalid
0404 <- invalid
0440 <- invalid
4004
4040
4400
0444 <- invalid
4044
4404
4440
4444
00005 <- invalid
00050 <- invalid
00500 <- invalid
05000 <- invalid
50000
00055 <- invalid
00505 <- invalid
00550 <- invalid
05050 <- invalid
05500 <- invalid
50500
55000
00555 <- invalid
05055 <- invalid
05505 <- invalid
05550 <- invalid
50550
55050
55500
. <- invalid
.. <- invalid
.0
0.
.1
1.
.00
0.0
00. <- invalid
.02
0.2
02. <- invalid
.20
2.0
20.
.22
2.2
22.
.000
0.00
00.0 <- invalid
000. <- invalid
.003
0.03
00.3 <- invalid
003. <- invalid
.030
0.30
03.0 <- invalid
030. <- invalid
.033
0.33
03.3 <- invalid
033. <- invalid
.303
3.03
30.3
303.
.333
3.33
33.3
333.
.0000
0.000
00.00 <- invalid
000.0 <- invalid
0000. <- invalid
.0004
0.0004
00.04 <- invalid
000.4 <- invalid
0004. <- invalid
.0044
0.044
00.44 <- invalid
004.4 <- invalid
0044. <- invalid
.0404
0.404
04.04 <- invalid
040.4 <- invalid
0404. <- invalid
.0444
0.444
04.44 <- invalid
044.4 <- invalid
0444. <- invalid
.4444
4.444
44.44
444.4
4444.
.00000
0.0000
00.000 <- invalid
000.00 <- invalid
0000.0 <- invalid
00000. <- invalid
.00005
0.0005
00.005 <- invalid
000.05 <- invalid
0000.5 <- invalid
00005. <- invalid
.00055
0.0055
00.055 <- invalid
000.55 <- invalid
0005.5 <- invalid
00055. <- invalid
.00505
0.0505
00.505 <- invalid
005.05 <- invalid
0050.5 <- invalid
00505. <- invalid
.00550
0.0550
00.550 <- invalid
005.50 <- invalid
0055.0 <- invalid
00550. <- invalid
.05050
0.5050
05.050 <- invalid
050.50 <- invalid
0505.0 <- invalid
05050. <- invalid
.05500
0.5500
05.500 <- invalid
055.00 <- invalid
0550.0 <- invalid
05500. <- invalid
.50500
5.0500
50.500
505.00
5050.0
50500.
.55000
5.5000
55.000
550.00
5500.0
55000.
.00555
0.0555
00.555 <- invalid
005.55 <- invalid
0055.5 <- invalid
00555. <- invalid
.05055
0.5055
05.055 <- invalid
050.55 <- invalid
0505.5 <- invalid
05055. <- invalid
.05505
0.5505
05.505 <- invalid
055.05 <- invalid
0550.5 <- invalid
05505. <- invalid
.05550
0.5550
05.550 <- invalid
055.50 <- invalid
0555.0 <- invalid
05550. <- invalid
.50550
5.0550
50.550
505.50
5055.0
50550.
.55050
5.5050
55.050
550.50
5505.0
55050.
.55500
5.5500
55.500
555.00
5550.0
55500.
.05555
0.5555
05.555 <- invalid
055.55 <- invalid
0555.5 <- invalid
05555. <- invalid
.50555
5.0555
50.555
505.55
5055.5
50555.
.55055
5.5055
55.055
550.55
5505.5
55055.
.55505
5.5505
55.505
555.05
5550.5
55505.
.55550
5.5550
55.550
555.50
5555.0
55550.
.55555
5.5555
55.555
555.55
5555.5
55555.
, <- invalid
,, <- invalid
1, <- invalid
,1 <- invalid
22, <- invalid
2,2 <- invalid
,22 <- invalid
2,2, <- invalid
2,2, <- invalid
,22, <- invalid
333, <- invalid
33,3 <- invalid
3,33 <- invalid
,333 <- invalid
3,33, <- invalid
3,3,3 <- invalid
3,,33 <- invalid
,,333 <- invalid
4444, <- invalid
444,4 <- invalid
44,44 <- invalid
4,444
,4444 <- invalid
55555, <- invalid
5555,5 <- invalid
555,55 <- invalid
55,555
5,5555 <- invalid
,55555 <- invalid
666666, <- invalid
66666,6 <- invalid
6666,66 <- invalid
666,666
66,6666 <- invalid
6,66666 <- invalid
66,66,66 <- invalid
6,66,666 <- invalid
,666,666 <- invalid
1,111.
1,111.11
1,111.110
01,111.110 <- invalid
0,111.100 <- invalid
11,11. <- invalid
1,111,.11 <- invalid
1111.1,10 <- invalid
01111.11,0 <- invalid
0111.100, <- invalid
1,111,111.
1,111,111.11
1,111,111.110
01,111,111.110 <- invalid
0,111,111.100 <- invalid
1,111,111.
1,1111,11.11 <- invalid
11,111,11.110 <- invalid
01,11,1111.110 <- invalid
0,111111.100 <- invalid
0002,22.2230 <- invalid
.,5.,., <- invalid
2.0,345,345 <- invalid
2.334.456 <- invalid

1
\b\d+,

\ b -------> শব্দের সীমানা

or d + ------> এক বা অঙ্ক

, --------> কমা রয়েছে,

যেমন:

sddsgg 70,000 sdsfdsf fdgfdg70,00

sfsfsd 5,44,4343 5.7788,44 555

এটি মিলবে:

70,

5,

44,

, 44


0
(,*[\d]+,*[\d]*)+

এটি কমা দিয়ে বা ছাড়াই কোনও ছোট বা বৃহত সংখ্যার সাথে মিলবে

1
100
1,262
1,56,262
10,78,999
12,34,56,789

বা

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