রেজেক্স ব্যবহার করে কোনও লাইন ফাঁকা আছে কিনা তা কীভাবে পরীক্ষা করবেন


154

আমি সাধারণ রেজেেক্স তৈরির চেষ্টা করছি যা কোনও লাইন ফাঁকা আছে কিনা তা যাচাই করবে।

কেস;

"    some"   // not blank
"   " //blank
"" // blank

এখানে ফাঁকা মানে যা আপনি বোঝাচ্ছেন। একটি লাইনে সাদা স্পেসে পূর্ণ থাকে বা একটি লাইনে কিছুই থাকে না। যদি আপনি কোনও লাইনের সাথে মিল রাখতে চান যা কিছু না থাকে তবে '/ ^ $ /' ব্যবহার করুন
Badri Gs

উত্তর:


328

আপনি যে প্যাটার্নটি চান সেটি হ'ল মাল্টলাইন মোডে এই জাতীয় কিছু:

^\s*$

ব্যাখ্যা:

  • ^ স্ট্রিং অ্যাঙ্কারের শুরু।
  • $ স্ট্রিং অ্যাঙ্কারের সমাপ্তি।
  • \s হোয়াইটস্পেস ক্যারেক্টার ক্লাস।
  • * এর শূন্য বা আরও বেশি পুনরাবৃত্তি।

মাল্টলাইন মোডে ^এবং $লাইনের শুরু এবং শেষটিও মিলায় ।

তথ্যসূত্র:


একটি নন-রেজেক্স বিকল্প:

আপনি প্রদত্ত স্ট্রিংটি line"ফাঁকা" আছে কিনা তা পরীক্ষা করতে পারেন (অর্থাত্ কেবল শ্বেতস্থান রয়েছে) trim(), তারপরে ফলাফলের স্ট্রিংটি পরীক্ষা করে দেখুন কিনা isEmpty()

জাভাতে, এটি এমন কিছু হবে:

if (line.trim().isEmpty()) {
    // line is "blank"
}

রেজেক্স সমাধানটি নীচে অ্যাঙ্করগুলি ছাড়াই ( matchesজাভাতে সংজ্ঞায়িত হওয়ার কারণে) আরও সহজ করা যেতে পারে :

if (line.matches("\\s*")) {
    // line is "blank"
}

এপিআই রেফারেন্স

  • String String.trim()
    • নেতৃস্থানীয় এবং অনুসরণযোগ্য শ্বেত স্পেস বাদ দিয়ে স্ট্রিংয়ের একটি অনুলিপি দেয়।
  • boolean String.isEmpty()
    • রিটার্নস trueযদি, এবং কেবল যদি, length()হয় 0
  • boolean String.matches(String regex)
    • এই (পুরো) স্ট্রিং প্রদত্ত নিয়মিত অভিব্যক্তির সাথে মেলে কিনা তা জানায়।

1
@ আদনান: মার্সেলোর উত্তরে বার্টের মন্তব্যটি নোট করুন; আপনি কীভাবে একাধিক ফাঁকা লাইন পরিচালনা করতে চান তার উপর নির্ভর করে প্যাটার্নটি কিছুটা পরিবর্তন হতে পারে।
polygenelubricants

ওয়েল আমি জাভা থেকে একটি ফাইল পড়ছি, লাইন লাইন, তাই আমি ধরে নিই যে এটি ঠিক হবে।
আদনান

1
লাইন.ট্রিমের সাথে এটি উজ্জ্বল বলে মনে হচ্ছে: ডি
আদনান

1
দুর্দান্ত কোডগুলি এখন 1.6 সেকেন্ড থেকে> 1 সেকেন্ডে কার্যকর হয় আপনাকে ধন্যবাদ।
আদনান

অজগরটিতে: if line.strip(): যেহেতু একটি খালি স্ট্রিং মূল্যায়ন করেFalse
জন মার্ক

58

আসলে মাল্টলাইন মোডে আরও সঠিক উত্তরটি হ'ল:

/((\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm

গৃহীত উত্তর: ^\s*$শেষ লাইনটি ফাঁকা থাকলে (মাল্টলাইন মোডে) কোনও দৃশ্যের সাথে মেলে না।


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

1
এই উত্তরটি নোটপ্যাড ++ এর মতো কোনও সরঞ্জামে পুরোপুরি কাজ করেছিল। গৃহীত উত্তর একাধিক খালি লাইনের সাথে মেলে তবে একক খালি লাইন নয়।
জেমস

আমার ক্ষেত্রে, গৃহীত উত্তর সাব্লাইম টেক্সট 3 এ কাজ করে না এবং এটি কাজ করে।
ইয়াংসিভাই

1
গৃহীত উত্তরটি আমার ক্ষেত্রে, মাল্টিলিনগুলির পক্ষে কাজ করেছে। এটা করে।
রবার্ট গ্যাব্রিয়েল

1
এটি সেরা উত্তর হওয়া উচিত।
প্রশ্ন আমি

12

এটা চেষ্টা কর:

^\s*$

5
@ আদনান, নোট করুন যে \sলাইন বিরতিগুলির সাথেও মেলে, সুতরাং আপনি ক্রমাগত খালি রেখা যুক্ত স্ট্রিংয়ের ভিতরে একক ফাঁকা লাইন "খুঁজে পাবেন না"।
বার্ট কায়ার্স

6

সবচেয়ে পোর্টেবল Regex হবে ^[ \t\n]*$একটি খালি স্ট্রিং (নোট যে আপনি প্রতিস্থাপন করতে হবে মেলে \tএবং \nট্যাব এবং সম্পর্কে newline তদনুসারে সঙ্গে) এবং [^ \n\t]একটি অ-হোয়াইটস্পেস স্ট্রিং মেলে।


আমি ক্লাসের সাথে কমপক্ষে একক স্থান পরিবর্তন করব[ \t]
বার্ট কায়ার্স

1
উইন্ডোজ এ আপনাকে ক্যারেজ রিটার্ন চরিত্রটিও বিবেচনা \rকরতে হবে যাতে রেজেেক্সটি হবে ^[ \t\r\n]*$। তবে ^\s*$আরও ভাল - আরও সংক্ষিপ্ত। আপনি যদি নতুন \h^\h*$
লাইনের

5

এই উত্তরের জন্য bchr02 এ সম্পূর্ণ ক্রেডিট । যাইহোক, খালি লাইন অনুসরণ করে (মন্তব্যের শেষে) যে রেখাগুলি রয়েছে তার জন্য দৃশ্যটি ধরতে আমাকে কিছুটা পরিবর্তন করতে হয়েছিল। রেজেক্সের সাথে খালি লাইনটি মিলছে ।*/*/

নতুন: (^(\r\n|\n|\r)$)|(^(\r\n|\n|\r))|^\s*$/gm

আমি যা করেছি তা হ'ল ^লাইনের সূচনা বোঝাতে দ্বিতীয় চরিত্র হিসাবে যুক্ত করা।


Bchr02 এর উত্তরে কেন মন্তব্য করবেন না এবং তার উত্তরের উন্নতির পরামর্শ দিচ্ছেন না?
অ্যাডামলগান

1
@ অ্যাডমলগান হ্যাঁ, স্মৃতি থেকে, আমি মনে করি আমি তখন এটি করতে চেয়েছিলাম, তবে অন্য কারও পোস্টে মন্তব্য করার মতো যথেষ্ট খ্যাতি আমার নেই, তাই এটি এইভাবেই করতে হয়েছিল।
জন হেনরি

3

খালি এখানে আপনি যা বোঝাতে চাইছেন তা বোঝা যাচ্ছে।
একটি লাইনে সাদা স্পেসে পূর্ণ থাকে বা একটি লাইনে কিছুই থাকে না।
যদি আপনি কোনও লাইনের সাথে মিল রাখতে চান যা কিছু না থাকে তবে '/ ^ $ /' ব্যবহার করুন।


-1

আচ্ছা ... আমি চারপাশে টিনক করেছিলাম (নোটপ্যাড ++ ব্যবহার করে) এবং এটিই আমি খুঁজে পেয়েছি সমাধান solution

\ N \ n গুলি

line n লাইনের শেষের জন্য (যেখানে আপনি ম্যাচ শুরু করেন) - আমার ক্ষেত্রে ক্যারেট সাহায্য করবে না কারণ সারিটির শুরুটি একটি স্ট্রিং \ এর পরবর্তী স্ট্রিং পর্যন্ত কোনও স্থান নেয়

আশা করি এটা সাহায্য করবে


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

ব্যবহারকারী একটি "সরল রেজেক্সের জন্য জিজ্ঞাসা করেছেন যা কোনও রেখা ফাঁকা আছে কিনা তা পরীক্ষা করে দেখবে" এই রেজেক্স (রিজেক্সপাল.কম-এ পরীক্ষিত) ঠিক এটি করে। কেন আপনি এটি পরীক্ষা না?
এমট্রোনিক

আর, আমাদের পরীক্ষা ভেক্টর ব্যবহার করছে: test_vec <- c(" some"," ","")। আপনার সমাধান: grepl("\\n\\s",test_vec) # [1] FALSE FALSE FALSE, ভোট সমাধান: grepl("^\\s*$",test_vec) # [1] FALSE TRUE TRUE। ভোট দেওয়া সমাধান প্রত্যাশিত ফলাফল দেয়, আপনার হয় না।
মুডি_ মুডস্কিপার

যেমন আমি বলেছিলাম যে আমি এটি নোটপ্যাড ++ এ ব্যবহার করেছি এবং এটি কার্যকর। তোমার হয়নি সুতরাং আমি অনুমান করি যে আমরা একমত হতে সম্মত হতে পারি!
এমট্রোনিক

আমি আসলে নিশ্চিত না যে আপনি কী করছেন, আপনি কি ctrl+fনোটপ্যাড ++ এ করছেন ? এই ক্ষেত্রে আপনি "বর্ধিত" অনুসন্ধান মোড নির্বাচন করে এবং 'ular n \ s' অনুসন্ধান করে ফাঁকা রেখা খুঁজে পেতে পারেন, যদি আপনি "নিয়মিত প্রকাশ" নির্বাচন করেন তবে আপনার স্ট্রিং একইর সাথে মিলবে এবং আপনি এটি করতে পারেন @ পলিজেলব্রিকেন্টস এর সমাধানটিও ব্যবহার করে দেখুন The পরবর্তীটি সত্যই লাইনটির সাথে মিলবে, আপনি যাচাই করতে পারেন এবং পার্থক্যটি দেখতে পারেন I আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি কী পরামর্শ দিচ্ছেন সে সম্পর্কে আরও পরিষ্কার হওয়ার জন্য আপনার উত্তরটি সম্পাদনা করুন, যাতে পাঠকরা আরও মূল্য নিতে পারেন এটি
মুডি_ মুডস্কিপার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.