বর্গাকার বন্ধনীগুলির মধ্যে পাঠ্য আহরণের জন্য নিয়মিত প্রকাশ expression


411

সরল রেজেক্স প্রশ্ন। নিম্নলিখিত ফর্ম্যাটটিতে আমার একটি স্ট্রিং রয়েছে:

this is a [sample] string with [some] special words. [another one]

বর্গাকার বন্ধনীগুলির মধ্যে শব্দগুলি নিষ্কাশনের জন্য নিয়মিত প্রকাশ কী।

sample
some
another one

দ্রষ্টব্য: আমার ব্যবহারের ক্ষেত্রে, বন্ধনীগুলি নেস্ট করা যায় না।

উত্তর:


765

আপনি বিশ্বব্যাপী নীচের রেজেক্স ব্যবহার করতে পারেন :

\[(.*?)\]

ব্যাখ্যা:

  • \[: [একটি মেটা চর এবং আপনি যদি এটির সাথে আক্ষরিক মিল করতে চান তবে এড়াতে হবে।
  • (.*?) : অ লোভী উপায়ে সমস্ত কিছু মেলে এবং এটি ক্যাপচার করুন।
  • \]: ]একটি মেটা চর এবং আপনি যদি এটির সাথে আক্ষরিক মিল করতে চান তবে এড়াতে হবে।

9
অন্য উত্তরটির পদ্ধতিটি ব্যবহার [^]]করা লোভহীন ( ?) এর চেয়ে দ্রুত এবং এটি রেজিেক্স ফ্লেভারগুলির সাথেও কাজ করে যা অ-লোভী সমর্থন করে না। যাইহোক, অ-লোভী সুন্দর দেখায়।
ইপসকিগল

183
[ ]আউটপুট (ফলাফল) থেকে কীভাবে বাদ পড়বেন ?
মিকি টিন

9
@ মিকিটিন, আপনি যদি জাভা ব্যবহার করছেন তবে আপনি গ্রুপ (1) দিয়ে স্রেফ গ্রুপ () এর উপর ভিত্তি করে গ্রুপ করতে পারেন, সুতরাং '[]' একসাথে যেতে পারবেন না
abyteneverlie

21
এটি কেবল প্রথম
ঘটনাটির সাথে

9
আপনি কীভাবে বন্ধনাকে রিটার্ন থেকে বাদ দেবেন?
জাজাদ্রা

119
(?<=\[).+?(?=\])

বন্ধনী ছাড়াই কন্টেন্ট ক্যাপচার করবে

  • (?<=\[) - ইতিবাচক চেহারা জন্য [

  • .*? - সামগ্রীর জন্য লোভী মিল নেই

  • (?=\]) - ইতিবাচক চেহারা জন্য ]

সম্পাদনা করুন: নেস্টেড বন্ধনীগুলির জন্য নীচের রেজেক্সের কাজ করা উচিত:

(\[(?:\[??[^\[]*?\]))

3
@ গৌরব আমি এটি পরীক্ষা করেছি এবং এটি কার্যকর। এটি জাভাস্ক্রিপ্টের মতো বর্ণমালার সমর্থন করে না এমন পরিবেশে যদিও কাজ করবে না। হতে পারে এটা আপনার ক্ষেত্রে?
অ্যাডাম মোসকিসিস্কি

অ্যাডাম, আপনার নেস্টেড বন্ধনীগুলির সমাধান যখন এতে একটি স্ট্রিং থাকে তখন ব্যর্থ হয় ....
প্যাট্রিক

89

এটি ঠিক কাজ করা উচিত:

\[([^]]+)\]

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

1
চরিত্র শ্রেণি [^]] এর অর্থ কী? এটি কি মেলে?
রিচার্ড

3
@ রিচার্ড, দ্য চরিত্র শ্রেণিকে উপেক্ষা করে। এর অর্থ "কোনও চরিত্র যা একটি নয়]"
জেসনবার

8
আমি মনে করি এটি প্রত্যাশার মতো কাজ করে না \[([^\[\]]*)\], সর্বাধিক অভ্যন্তরীণ বন্ধনীতে সামগ্রীটি পেতে আপনার ব্যবহার করা উচিত । যদি আপনি এটি সন্ধান করেন lfjlksd [ded[ee]22]তবে \[([^]]+)\]আপনাকে পেয়ে যাবে [ded[ee]যখন প্রস্তাবিত ভাবটি ফিরে আসবে [ee]লিঙ্কে
টিএমসি 14

1
আপনি কি এই রেজেক্সটি ব্যবহার করতে এবং পাঠ্য উত্তোলনের জন্য 'সেড' এবং 'অ্যাডক' উদাহরণ সরবরাহ করতে পারেন? ধন্যবাদ।
ভ্যালেন্ট 14

32

বন্ধনী বাসা বাঁধতে পারে?

যদি তা না হয়: \[([^]]+)\]বর্গাকার বন্ধনী সহ এক আইটেমের সাথে মেলে। ব্যাকরেফারেন্সটিতে \1আইটেমটি মিলবে। যদি আপনার রেজেক্স ফ্লেভার চেহারাটিকে সমর্থন করে তবে ব্যবহার করুন

(?<=\[)[^]]+(?=\])

এটি কেবল বন্ধনীগুলির মধ্যে থাকা আইটেমটির সাথে মিলবে।


@ কুণাল মুখোপাধ্যায়: না, রেজেক্স যেকোন সংখ্যক বারের সাথে মেলে। তবে কিছু রেইগেক্স স্বাদগুলি বার বার রিজেক্স প্রয়োগ করার জন্য স্পষ্ট করে বলা দরকার (উদাহরণস্বরূপ, /gজাভাস্ক্রিপ্টে পতাকা ব্যবহার করে)।
টিম পিটজ্যাকার

14

আপনি যদি ম্যাচে বন্ধনীগুলি অন্তর্ভুক্ত করতে না চান তবে এখানে রেইজেক্সটি রয়েছে: (?<=\[).*?(?=\])

আসুন এটি ভেঙে দিন

.লাইন terminators ছাড়া কোনো চরিত্র মেলে। ?=একটি হল ইতিবাচক lookahead । যখন একটি নির্দিষ্ট স্ট্রিং এর পরে আসে তখন একটি ধনাত্মক বর্ণনীয় একটি স্ট্রিং সন্ধান করে। ?<=একটি হল ইতিবাচক lookbehind । যখন একটি নির্দিষ্ট স্ট্রিং এর আগে চলে যায় তখন একটি ইতিবাচক চেহারা পিছনে একটি স্ট্রিং সন্ধান করে। উদ্ধৃত করা এই ,

ইতিবাচক তাকান (? =)

এক্সপ্রেশন বি অনুসরণ করে যেখানে একটিটি প্রকাশ করুন:

A(?=B)

ইতিবাচক (? <=) পিছনে তাকান

এক্সপ্রেশন বি এর আগে যেখানে অভিব্যক্তিটি সন্ধান করুন:

(?<=B)A

বিকল্প

যদি আপনার রেজেক্স ইঞ্জিন লিকহেডগুলি এবং লুকবিহাইন্ডগুলি সমর্থন করে না, তবে আপনি \[(.*?)\]একটি গ্রুপের বন্ধনীগুলির আভ্যন্তরীণ অংশগুলি ক্যাপচার করতে রেইগেক্সটি ব্যবহার করতে পারেন এবং তারপরে আপনি গ্রুপটিকে প্রয়োজনীয় হিসাবে চালিত করতে পারেন।

এই রেজেক্স কিভাবে কাজ করে?

বন্ধনীগুলি একটি গোষ্ঠীতে অক্ষরগুলি ক্যাপচার করে। .*?বন্ধনী অক্ষরের মধ্যে সব পায় (যদি না আপনি, লাইন terminators করা ছাড়া তাদের sএকটি উপায় যে লোভী নয় পতাকা সক্ষম)।


12

(?<=\[).*?(?=\])উপরোক্ত ব্যাখ্যা অনুযায়ী ভাল কাজ করে। পাইথনের উদাহরণ এখানে:

import re 
str = "Pagination.go('formPagination_bottom',2,'Page',true,'1',null,'2013')"
re.search('(?<=\[).*?(?=\])', str).group()
"'formPagination_bottom',2,'Page',true,'1',null,'2013'"

1
রেজিজেসগুলির জন্য যেখানেই প্রদর্শিত না হয় আপনার কোড কোডিংটি সর্বদা ব্যবহার করা উচিত। যদি রেজেক্স কোনও কোড ব্লকের পরিবর্তে পাঠ্যে থাকে তবে আপনি সেগুলি ফর্ম্যাট করতে ব্যাকটিক্স ব্যবহার করতে পারেন। ( রেফ )
অ্যালান মুর

1
এছাড়াও, প্রশ্নটি বন্ধনীগুলি []নয়, বর্গাকার বন্ধনী ( ) সম্পর্কে ছিল ।
অ্যালান মুর

6

কেবলমাত্র যদি আপনার ভারসাম্যহীন বন্ধনী থাকতে পারে তবে আপনি সম্ভবত এর অনুরূপ পুনরাবৃত্তি সহ কিছু এক্সপ্রেশন ডিজাইন করতে পারেন,

\[(([^\]\[]+)|(?R))*+\]

অবশ্যই, এটি আপনার ব্যবহার করা ভাষা বা রেজিএক্স ইঞ্জিনের সাথে সম্পর্কিত।

RegEx ডেমো 1


তা ছাড়া,

\[([^\]\[\r\n]*)\]

RegEx ডেমো 2

বা,

(?<=\[)[^\]\[\r\n]*(?=\])

RegEx ডেমো 3

অন্বেষণ করার জন্য ভাল বিকল্প।


আপনি যদি ভাবটি সরল / সংশোধন / অন্বেষণ করতে চান তবে এটি regex101.com এর ডানদিকে ডান প্যানেলে ব্যাখ্যা করা হয়েছে । আপনি যদি চান, আপনি এই লিঙ্কটিতেও দেখতে পারেন , কীভাবে এটি কিছু নমুনার ইনপুটগুলির সাথে মেলে।


রেজেক্স সার্কিট

jex.im নিয়মিত এক্সপ্রেশন ভিজ্যুয়ালাইজ করে:

এখানে চিত্র বর্ণনা লিখুন

পরীক্ষা

const regex = /\[([^\]\[\r\n]*)\]/gm;
const str = `This is a [sample] string with [some] special words. [another one]
This is a [sample string with [some special words. [another one
This is a [sample[sample]] string with [[some][some]] special words. [[another one]]`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}

সূত্র

ভারসাম্য প্রথম বন্ধনীর সাথে মেলে নিয়মিত প্রকাশ


4

আপনি যদি স্কোয়ার ব্র্যাকেট আজকের মধ্যে কেবলমাত্র ছোট বর্ণমালা অক্ষর পূরণ করতে চান

(\[[a-z]*\])

আপনি যদি ছোট এবং ক্যাপস লেটারটি a-zA-Z করতে চান

(\[[a-zA-Z]*\]) 

আপনি যদি ছোট ক্যাপ এবং নম্বর অক্ষরটি a-zA-Z0-9 চান

(\[[a-zA-Z0-9]*\]) 

আপনি যদি বর্গাকার বন্ধনীর মধ্যে সবকিছু চান

আপনি যদি পাঠ্য, নম্বর এবং প্রতীক চান

(\[.*\])

3
([[][a-z \s]+[]])

উপরে নিম্নলিখিত ব্যাখ্যা দিয়ে কাজ করা উচিত

  • বর্গাকার বন্ধনীর মধ্যে অক্ষরগুলি [] বৈশিষ্ট্য শ্রেণি সংজ্ঞায়িত করে যার অর্থ প্যাটার্নটি বর্গাকার বন্ধনীগুলির মধ্যে উল্লিখিত ন্যূনতম একটি চারকটারের সাথে মিলিত হওয়া উচিত

  • । গুলি একটি স্থান নির্দিষ্ট করে

  •  + এর পূর্বে উল্লিখিত একটি চরিত্রের অন্ততপক্ষে means


সংবেদনশীল ক্ষেত্রেই A-Zপ্যাটার্ন যোগ করা উচিত: ([[][a-zA-Z \s]+[]]); আমি মনে করি এটি ভাল উপায়, যখন \ রেইগেক্স নিদর্শনগুলিতে স্ট্রিং চিহ্নগুলিতে সংজ্ঞা দেওয়া হয় ("এবং ') এবং ব্যাকস্ল্যাশ হ্যান্ডলিং দ্বারা" বা' ইউজেজেস দ্বারা নতুনদের মেশানো!
মোহামাদ

একমাত্র উত্তর যা আমার জন্য সি ++ রিজেক্সের জন্য কাজ করেছিল (ব্র্যাকেটের পরিবর্তে কোটেশন সহ আমি এগুলি করা ছাড়া)। std::regex pattern{R"(["][a-zA-Z \s]+["])"};
স্ট্যাকআটাক

3

এই কোডটি বর্গক্ষেত্র বন্ধনী এবং প্রথম বন্ধনীগুলির মধ্যে থাকা সামগ্রীটি বের করবে

(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))

(?: non capturing group
(?<=\().+?(?=\)) positive lookbehind and lookahead to extract the text between parentheses
| or
(?<=\[).+?(?=\]) positive lookbehind and lookahead to extract the text between square brackets


0

আমার নিউলাইনগুলি সহ বন্ধনীগুলি অন্তর্ভুক্ত ছিল

\[[\s\S]+\]


0

প্রথম এবং শেষের মধ্যে [ ] একটি স্ট্রিংয়ের সাথে মেলে , আপনি ব্যবহার করতে পারেন

\[.*\]            # Including open/close brackets
\[(.*)\]          # Excluding open/close brackets (using a capturing group)
(?<=\[).*(?=\])   # Excluding open/close brackets (using lookarounds)

একটি রেজেক্স ডেমো এবং একটি রেজেক্স ডেমো # 2 দেখুন

নিকটতম বর্গাকার বন্ধনীগুলির মধ্যে স্ট্রিংগুলি মেলে নীচের এক্সপ্রেশনগুলি ব্যবহার করুন :

  • বন্ধনী সহ:

    • \[[^][]*]- পিসিআরই, পাইথন re/ ,। regexনেট, গোলং, পসিক্স (গ্রেপ, সেড , বাশ)
    • \[[^\][]*]- ECMAScript (জাভাস্ক্রিপ্ট, সি ++ std::regex, ভিবিএ RegExp)
    • \[[^\]\[]*] - জাভা রেজেক্স
    • \[[^\]\[]*\] - অনিগমো (রুবি, সর্বত্র বন্ধনী ছাঁটাই প্রয়োজন)
  • বন্ধনী বাদে:

    • (?<=\[)[^][]*(?=])- পিসিআরই, পাইথন re/ regex, নেট নেট (সি # ইত্যাদি), আইসিইউ (আর stringr), জে জি সফট সফটওয়্যার
    • \[([^][]*)]- বাশ , গোলং - অনস্কেপড বন্ধনীগুলির এক জোড়া দিয়ে বর্গাকার বন্ধনীগুলির মধ্যে থাকা সামগ্রীগুলি ক্যাপচার করুন, নীচে দেখুন
    • \[([^\][]*)]- জাভাস্ক্রিপ্ট , সি ++std::regex , ভিবিএRegExp
    • (?<=\[)[^\]\[]*(?=]) - জাভা রেজেক্স
    • (?<=\[)[^\]\[]*(?=\]) - অনিগমো (রুবি, সর্বত্র বন্ধনী ছাঁটাই প্রয়োজন)

দ্রষ্টব্য : *0 বা ততোধিক অক্ষরের +সাথে মেলে, ফলাফলের তালিকা / অ্যারেতে খালি স্ট্রিংয়ের ম্যাচগুলি এড়াতে 1 বা আরও বেশি ম্যাচের জন্য ব্যবহার করুন ।

যখনই উভয় দর্শনীয় সাপোর্ট উপলব্ধ থাকে, শীর্ষস্থানীয় / পিছনে খোলা / বন্ধ বন্ধনীটি বাদ দিতে উপরের সমাধানগুলি তাদের উপর নির্ভর করে। অন্যথায়, গ্রুপগুলি ক্যাপচারের উপর নির্ভর করুন (কয়েকটি ভাষায় সর্বাধিক সাধারণ সমাধানের লিঙ্ক সরবরাহ করা হয়েছে)।

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

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