মিল লাইনব্রেক - \ n বা or r \ n?


159

এই উত্তরটি লেখার সময় , আমাকে s-ফ্লেগ ( dotall- ডট মিলছে লাইন ব্রেকগুলি ) ব্যবহার না করে লাইন ব্রেকগুলিতে একচেটিয়াভাবে মিলতে হয়েছিল match

নিয়মিত অভিব্যক্তিগুলি পরীক্ষা করার জন্য ব্যবহৃত সাইটগুলিতে \nবা মেলে চেষ্টা করার সময় বিভিন্নভাবে আচরণ করে \r\n

আমি লক্ষ্য করেছি

  • Regex101 শুধুমাত্র লাইন ব্রেককে সাথে মেলে \n
    ( উদাহরণ - মুছুন \rএবং এটি মেলে)

  • RegExr linebreaks সাথে মেলে তন্ন তন্ন উপর \n কিংবা উপর \r\n
    এবং আমি কিছু একটা LINEBREAK মেলে না করতে এটি, ছাড়া, করতে পারেন m-flag এবং \s
    ( উদাহরণস্বরূপ )

  • Debuggex আরও বেশি বিভিন্ন আচরণ করবে:
    মধ্যে এই উদাহরণে এটি শুধুমাত্র উপর মিলে যায় \r\n, যখন
    এখানে এটি শুধুমাত্র উপর ম্যাচ \nএকই পতাকা এবং ইঞ্জিন নিদিষ্ট সঙ্গে,

আমি m-ফ্লেগ (মাল্টলাইন - একটি লাইনের ^শুরু এবং $শেষের সাথে মিল রাখে) সম্পর্কে পুরোপুরি সচেতন , তবে কখনও কখনও এটি কোনও বিকল্প নয়। সঙ্গে একই \s, যেমন ট্যাব এবং স্পেস, খুব মেলে।

ইউনিকোড নিউলাইন চরিত্রটি ব্যবহার করার জন্য আমার ধারণা \u0085সফল হয়নি, সুতরাং:

  1. নিয়মিত অভিব্যক্তিতে কোনও লাইন ব্রেক (সম্ভবত ভাষাটি নির্বিশেষে নির্বিশেষে) ম্যাচকে সংহত করার জন্য কোনও ব্যর্থ সাফ উপায় আছে?
  2. উল্লিখিত সাইটগুলি কেন আলাদাভাবে আচরণ করে (বিশেষত ডিবাগেক্স, কেবল \nএকবারে এবং একবারে একবারে মিলছে \r\n)?

15
আপনি চেষ্টা করতে পারেন [\r\n]+- বা এর মতো কিছু
Iłya Bursov

3
আমি ব্যবহার করি: \r?\nউভয় \r\nএবং \nলাইন সমাপ্তি ক্রম মিলিয়ে । এটি পুরানো \rম্যাক সিনট্যাক্সের জন্য কাজ করে না , তবে এটি আজকাল খুব বিরল।
রডগারুনার

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

2
@ অ্যান্ডারগননার ম্যাকের সিনট্যাক্সটি যুক্ত করতে, আপনি করতে পারেন (? r? | n | \ r), যা নীচে পিটার ভ্যান ডের ওয়াল এর উত্তরের মতো তবে আরও কমপ্যাক্ট (10 অক্ষর 12 বনাম)।
ডক্টর জে

উত্তর:


220

বিপরীত দিকে উত্তর দিতে হবে।

2) সম্পর্কে সম্পূর্ণ ব্যাখ্যা \rএবং \nআমাকে এই প্রশ্নটি উল্লেখ করতে হবে, যা আমি এখানে পোস্ট করব তার চেয়ে অনেক বেশি পরিপূর্ণ: and n এবং \ r এর মধ্যে পার্থক্য?

দীর্ঘ গল্প সংক্ষিপ্ত, লিনাক্স \nএকটি নতুন লাইন, উইন্ডোজ \r\nএবং পুরানো ম্যাকের জন্য ব্যবহার করে \r। সুতরাং একটি নতুন লাইন লেখার একাধিক উপায় রয়েছে। আপনার দ্বিতীয় সরঞ্জাম (RegExr) উদাহরণটি একক ক্ষেত্রে মিলবে \r

1) [\r\n]+ইলিয়া প্রস্তাবিত হিসাবে কাজ করবে, তবে একাধিক পরপর নতুন লাইনের সাথেও মিলবে। (\r\n|\r|\n)আরও সঠিক।


সুতরাং, \r/ \nঅপারেটিং সিস্টেমের উপর নির্ভরশীল - এটি এমন একটি জিনিস যা জানতে পারে (;)) - তবে কেন দুটি ডিবাগেক্স-উদাহরণগুলি একবার \ r \ n এবং একবার \ n এর সাথে মিলবে? অন্তত আমার জন্য দৃশ্যমান কোনও পার্থক্য নেই (উদাহরণগুলিতে)।
কীনোন

সম্ভবত আপনি আপনার উইন্ডোজ পাঠ্য সম্পাদক থেকে একটি অনুলিপি করেছেন এবং অন্যটি আপনি সোজা ডিবাগেক্স টেক্সারিয়ায় লিখেছেন। প্রতিটি ব্যবহৃত বিভিন্ন লাইন ব্রেক।
ওঝাজা

1
প্রকৃতপক্ষে, কারণ আপনার তৃতীয় উদাহরণে (সিনিয়র পুরুষদের ...) \r\nপাঠ্যটিতে একটি রয়েছে (যদি আপনি ডান ক্লিক করেন এবং উত্স দেখান তবে আপনি {{Infobox XC Championships\r\n|Name =কোথাও খুঁজে পাবেন )। দ্বিতীয় সরঞ্জামটি ফ্ল্যাশে লেখা হয়েছে এবং আপনি পৃষ্ঠাটি পড়ার সাথে সাথে নিউলাইন-চরিত্রগুলি নিয়ে কিছুটা বগি।
পিটার ভ্যান ডার ওয়াল

1
(\r\n|\r|\n)আরও সহজভাবে লেখা যেতে পারে\r\n?
আসাদ সাইদুদ্দীন

2
পছন্দ করুন এটি ইউনিক্স লাইন-শেষের সাথে মেলে না\n
পিটার ভ্যান ডের ওয়াল

12

ডিবাগেক্সে উদাহরণ পাঠ্যগুলিতে আপনার আলাদা লাইন শেষ রয়েছে। বিশেষত মজার বিষয় হ'ল ডিবাগেক্স আপনাকে প্রথমে কোন লাইন শেষের শৈলী ব্যবহার করেছে তা সনাক্ত করেছে এবং এটি সমস্ত অতিরিক্ত লাইন এন্ডিংগুলিকে সেই স্টাইলে রূপান্তরিত করে।

আমি ইউনিক্স এবং উইন্ডোজ ফর্ম্যাটে নমুনা পাঠ্যকে ডিবাগেক্সে আটকানোর জন্য নোটপ্যাড ++ ব্যবহার করেছি এবং আমি প্রথমে যে কোনওটি পেস্ট করেছি সেটিই ডিবাগেক্সের সেই অধিবেশনটি আটকেছিল।

সুতরাং, আপনার পাঠ্য সম্পাদককে এটি ডিবাগেক্সে আটকানোর আগে ধোয়া উচিত। আপনি যে স্টাইলটি চান তা আটকানো হয়েছে তা নিশ্চিত করুন। ইউনিক্স শৈলীতে ডিবাগেক্স ডিফল্ট (\ n)।

এছাড়াও, এনইএল (\ u0085) সম্পূর্ণ ভিন্ন কিছু: https://en.wikedia.org/wiki/Newline#Unicode

(\r?\n)ইউনিক্স এবং উইন্ডোজ কভার করবে। আপনার (\r\n|\r|\n)যদি আরও পুরানো ম্যাকের সাথে মেলাতে চান তবে আপনার আরও জটিল কিছু প্রয়োজন হবে।


ডিবাগেক্স সম্পর্কে খুব আকর্ষণীয় বিষয়! এছাড়াও, 00 u0085 দেখানোর জন্য ধন্যবাদ, সেখানে বিভ্রান্ত হয়েছে!
কীনোন

3

পিসিআরই \Rম্যাচগুলিতে \n, \rএবং \r\n


কোনও প্রশ্ন নেই
স্যান্ডওয়েল

1
@ স্যান্ডওয়েল: দুঃখিত, আমি আপনাকে পাই না, এটি কোনও প্রশ্ন নয়, এটি একটি উত্তর, এর চেয়ে সহজ(\r\n|\r|\n)
টোটো

2

এটি কেবল 1 প্রশ্নে প্রযোজ্য।

আমার কাছে একটি অ্যাপ্লিকেশন রয়েছে যা উইন্ডোজে চলে এবং বহু-লাইন এমএফসি সম্পাদক বক্স ব্যবহার করে।
সম্পাদক বাক্সটি সিআরএলএফ লাইনব্রেকগুলি প্রত্যাশা করে, তবে আমার
কিছু সত্যই বড় / বাজে regexs দিয়ে প্রবেশ করা পাঠ্যকে পার্স করা দরকার ।

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

এটি খুব বেশি সময় নেয় না।
এটিই আমি ব্যবহার করি।

 boost::regex  CRLFCRtoLF (
     " \\r\\n | \\r(?!\\n) "
     , MODx);

 boost::regex  CRLFCRtoCRLF (
     " \\r\\n?+ | \\n "
     , MODx);


 // Convert (All style) linebreaks to linefeeds 
 // ---------------------------------------
 void ReplaceCRLFCRtoLF( string& strSrc, string& strDest )
 {
    strDest  = boost::regex_replace ( strSrc, CRLFCRtoLF, "\\n" );
 }

 // Convert linefeeds to linebreaks (Windows) 
 // ---------------------------------------
 void ReplaceCRLFCRtoCRLF( string& strSrc, string& strDest )
 {
    strDest  = boost::regex_replace ( strSrc, CRLFCRtoCRLF, "\\r\\n" );
 }

2

পাইথনে:

# as Peter van der Wal's answer
re.split(r'\r\n|\r|\n', text, flags=re.M) 

বা আরও কঠোর:

# https://docs.python.org/3/library/stdtypes.html#str.splitlines
str.splitlines()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.