রেজেক্স দুটি অক্ষরের মধ্যে সমস্ত অক্ষর মেলে


434

উদাহরণ: "এটি কেবল \ না সরল বাক্য"।

আমি "এটি এটি" এবং "বাক্য" এর মধ্যে প্রতিটি চরিত্রের সাথে মিল রাখতে চাই। লাইন বিরতি উপেক্ষা করা উচিত। আমি সঠিক বাক্য গঠন বুঝতে পারি না।


11
আপনি কোন পরিবেশটি রেজিএক্স ব্যবহার করছেন তা আপনি নির্দেশ করতে চাইতে পারেন line লাইন ব্রেকগুলি "উপেক্ষা" দ্বারা আপনি কী বোঝাতে চেয়েছেন তার উপর নির্ভর করে পার্থক্য থাকতে পারে।
অ্যান্ড্রু বারবার

উত্তর:


646

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

(?<=This is)(.*)(?=sentence)

Regexr

আমি চেহারাটি পিছনে ব্যবহার করেছি (?<=)এবং এগিয়ে চেয়েছি (?=)যাতে "এটি" এবং "বাক্য" ম্যাচে অন্তর্ভুক্ত না হয়, তবে এটি আপনার ব্যবহারের ক্ষেত্রে, আপনি কেবল লিখতেও পারেন This is(.*)sentence

এখানে গুরুত্বপূর্ণ বিষয়টি হ'ল আপনি নিজের রেগেক্স ইঞ্জিনের "ডটল" মোডটি সক্রিয় করেন, যাতে .নতুন লাইনের সাথে মিলছে। তবে আপনি এটি কীভাবে করবেন তা নির্ভর করে আপনার রেজেক্স ইঞ্জিনের উপর।

পরের জিনিসটি যদি আপনি ব্যবহার করেন .*বা করেন .*?। প্রথমটি লোভী এবং আপনার স্ট্রিংয়ের শেষ "বাক্য" পর্যন্ত মিলবে, দ্বিতীয়টি অলস এবং আপনার স্ট্রিংয়ের পরবর্তী "বাক্য" পর্যন্ত মিলবে।

হালনাগাদ

Regexr

This is(?s)(.*)sentence

যেখানে (? গুলি) ডটল সংশোধকটি চালু করে, .নতুন লাইনের অক্ষরগুলির সাথে মিলে যায়।

আপডেট 2:

(?<=is \()(.*?)(?=\s*\))

আপনার উদাহরণটির সাথে মিলছে "এটি (একটি সাধারণ) বাক্য"। রেজেক্সারে এখানে দেখুন


@ ক্রিশ্চ, দুঃখিত আমি এটি সন্ধান করতে হবে। আমি কি এই সঠিকটি বুঝতে পারি এবং This is(?s)(.*)sentenceকাজ করব?
স্টিমা

@ স্টিমা: হ্যাঁ, এটি বেশিরভাগ রেজেক্স লাইব্রেরির অধীনে "ডট অল" মোড সক্ষম করতে কাজ করা উচিত।
tchrist

1
এটি বেশিরভাগই আমার সমস্যার সমাধান করেছে, তবে কীভাবে আমি আমার ধাঁচে একটি সাদা স্থানের অক্ষর অন্তর্ভুক্ত করব? আমি নিম্নলিখিতগুলি চেষ্টা করেছিলাম: "(। *?) ())" ক্রমটির সাথে "" মিলিয়ে ")" তবে এটি কার্যকর হয়নি।
0xbadf00d

28
কেবল একটি নোট - রেজেক্সার এখন বলেছেন যে জাভাস্ক্রিপ্টে লুকবিহাইন্ড সমর্থিত নয়
কোভো

2
পাঠ্যের একটি ব্লকে এই বিভক্তির বারবার দৃষ্টান্তগুলির সাথে মোকাবিলা করার কোনও উপায় আছে কি? উদাহরণস্বরূপ: "এটি কেবল \ না সাধারণ বাক্য Here এখানে কিছু অতিরিক্ত জিনিস This এটি কেবল \ না সরল বাক্য And বর্তমানে এটি প্রতিটি ইভেন্টের চেয়ে পুরো স্ট্রিংয়ের সাথে মেলে।
জাজাদ্রা

181

অলস কোয়ান্টিফায়ার দরকার

এই প্রশ্নের পুনরুত্থান কারণ গ্রহণযোগ্য উত্তরের রেজেেক্স আমার কাছে বেশ সঠিক বলে মনে হচ্ছে না। কেন? কারণ

(?<=This is)(.*)(?=sentence)

ম্যাচ হবে my first sentence. This is my secondমধ্যেThis is my first sentence. This is my second sentence.

ডেমো দেখুন

দুটি দর্শনের মধ্যে আপনার একটি অলস পরিমাণের প্রয়োজন। একটি যোগ করা ?তারাকে অলস করে তোলে।

এটি আপনি যা চান তা মেলে:

(?<=This is).*?(?=sentence)

ডেমো দেখুন । আমি ক্যাপচার গ্রুপটি সরিয়েছি, যার দরকার নেই।

লাইন বিরতি জুড়ে ডটল মোড atch

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

(?s)(?<=This is).*?(?=sentence)

উল্লেখ


ক্যাপচারিং গ্রুপ সম্পর্কে আপনি সঠিক। কেন আমি এই কাজ করেছি জানি না। কিন্তু এর মধ্যে পার্থক্য .*এবং .*?আমার উত্তর (আগে "আপডেট" অনুচ্ছেদ) ব্যাখ্যা করা হয়েছে। সুতরাং আমার উত্তরটি ভুল বলে আমি মনে করি না।
স্টিমা

2
@ স্টিমা নিটপিকিংয়ের জন্য দুঃখিত, গতকাল আপনার উত্তরগুলির মধ্য দিয়ে কিছুটা ঘুরে বেড়ানোর সময় এটিই আমাকে দ্বিধায় ফেলেছে। :) আমি থেকে প্রথম লাইন তরলিত is incorrectকরার doesn't seem quite correct to me... আশা করি যে দেখা যায় না আপনি পিটপিট্, সম্ভবত শুধু একটি কি এই ধরনের একটি উচ্চ ট্রাফিক উত্তরের জন্য Regex হওয়া উচিত সম্পর্কে উপলব্ধি পার্থক্য।
zx81

39

চেষ্টা করুন This is[\s\S]*sentence, জাভাস্ক্রিপ্টে কাজ করে


এইভাবে একটি অলস চেহারা কিভাবে করবেন?
এজামপ্লেয়ার

4
উপরে ক্লিক করুন [\s\S]*?(এছাড়াও বলা হয়: অ লোভী ওয়াইল্ডকার্ড)
ফিল্ড 294


13

এটা ব্যবহার কর: (?<=beginningstringname)(.*\n?)(?=endstringname)


জানেন না কেন সমস্ত আপ ভোট, এটি 0-1 লাইন বিরতি দেয় এবং লাইন endstringname
ব্রেকটি

লগ লাইনগুলির (টাইমস্ট্যাম্প ইত্যাদি) শুরু করার জন্য আমি এটি দরকারী মনে করেছি useful আমি প্রারম্ভিক স্ট্রিংয়ের জন্য নতুন লাইন এবং শেষ স্ট্রিংয়ের জন্য "এট" ব্যবহার করেছি।
স্ট্যান

2

যদি কেউ জেনকিন্স প্রসঙ্গে এর উদাহরণ খুঁজছেন। এটি বিল্ড.লগকে পার্স করে এবং যদি এটি কোনও মিল খুঁজে পায় তবে এটি ম্যাচের সাথে বিল্ডটিকে ব্যর্থ করে।

import java.util.regex.Matcher;
import java.util.regex.Pattern;

node{    
    stage("parse"){
        def file = readFile 'build.log'

        def regex = ~"(?s)(firstStringToUse(.*)secondStringToUse)"
        Matcher match = regex.matcher(file)
        match.find() {
            capturedText = match.group(1)
            error(capturedText)
        }
    }
}


0

সাব্লাইম টেক্সট 3x

উত্সাহ পাঠ্যে, আপনি কেবল দুটি ক্ষেত্রে লিখুন যা আপনি আগ্রহী হিসাবে উদাহরণস্বরূপ আপনার ক্ষেত্রে এটি রাখতে চান

"এটি" এবং "বাক্য"

এবং আপনি লিখুন। * এর মধ্যে

অর্থাত This is .* sentence

এবং এটি আপনার ভাল করা উচিত


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

0

আমি এটি কীভাবে করেছি তা এখানে:
নির্দিষ্ট রেজেক্সটি প্রয়োজনীয় করার চেয়ে এটি আমার পক্ষে সহজ।

int indexPictureData = result.IndexOf("-PictureData:");
int indexIdentity = result.IndexOf("-Identity:");
string returnValue = result.Remove(indexPictureData + 13);
returnValue = returnValue + " [bytecoderemoved] " + result.Remove(0, indexIdentity); ` 

0

ভিআইএম-এ দ্রুত অনুসন্ধানের জন্য, আপনি ভিম কন্ট্রোল প্রম্পটে ব্যবহার করতে পারেন: / এটি * *। _। * বাক্য


0

পাইথন 3-এর জন্য পুরানো স্ক্রিপ্টগুলিতে পাইথন 2-এ, মুদ্রণ "স্ট্রিং" এর মধ্যে এই মুদ্রণ সিনট্যাক্সটি রূপান্তর করতে আমি রেগেক্সের অনুসন্ধানে এখানে পৌঁছেছি print ভাল কাজ করে, অন্যথায় অতিরিক্ত রূপান্তরগুলির জন্য 2to3.py ব্যবহার করুন। অন্যদের জন্য আমার সমাধানটি এখানে:

এটি Regexr.com এ চেষ্টা করে দেখুন (কোনও কারণে এনপি ++ এ কাজ করে না):

find:     (?<=print)( ')(.*)(')
replace: ('$2')

ভেরিয়েবলের জন্য:

(?<=print)( )(.*)(\n)
('$2')\n

লেবেল এবং পরিবর্তনশীল জন্য:

(?<=print)( ')(.*)(',)(.*)(\n)
('$2',$4)\n

পাইথন 3 এর মুদ্রণ ("স্ট্রিং") দিয়ে পাইথন 2 এর সমস্ত মুদ্রণ "স্ট্রিং" কীভাবে প্রতিস্থাপন করবেন?


0

এটি আমার পক্ষে কাজ করেছে (আমি ভিএস কোড ব্যবহার করছি ):

জন্য: This is just\na simple sentence

ব্যবহার করুন: This .+ sentence


0

জাভা পদ্ধতির সাহায্যে দুটি স্ট্রিংয়ের মধ্যে সমস্ত কিছুর সাথে মিলিয়ে যাওয়ার জন্য RegEx।

List<String> results = new ArrayList<>(); //For storing results
String example = "Code will save the world";

RegEx (। ?) * ব্যবহার করতে প্যাটার্ন এবং ম্যাচার অবজেক্ট ব্যবহার করা যাক ।

Pattern p = Pattern.compile("Code "(.*?)" world");   //java.util.regex.Pattern;
Matcher m = p.matcher(example);                      //java.util.regex.Matcher;

ম্যাচারে যেহেতু একাধিক ম্যাচ থাকতে পারে, তাই আমাদের ফলাফলগুলি লুপ করে সংরক্ষণ করতে হবে।

while(m.find()){   //Loop through all matches
   results.add(m.group()); //Get value and store in collection.
}

এই উদাহরণটিতে কেবল " শব্দটি সংরক্ষণ করবে" থাকবে তবে বড় পাঠ্যে এটি সম্ভবত আরও মিল খুঁজে পাবে।

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