রেজেক্সের ভিত্তিতে পাইথন স্প্লিট স্ট্রিং


113

"HELLO there HOW are YOU"বড় হাতের অক্ষরের মতো (পাইথনে) কোনও স্ট্রিংকে বিভক্ত করার সর্বোত্তম উপায় কী ?

সুতরাং আমি যেমন একটি অ্যারের সাথে শেষ করব: results = ['HELLO there', 'HOW are', 'YOU']


সম্পাদনা করুন:

আমি চেষ্টা করেছি:

p = re.compile("\b[A-Z]{2,}\b")
print p.split(page_text)

যদিও এটি কাজ করে না বলে মনে হচ্ছে।



5
যখন আপনি বলেন যে কোনও কিছু কাজ করে না, আপনার কারণটি ব্যাখ্যা করা উচিত। আপনি কি একটি ব্যতিক্রম পেতে? (যদি তা হয় তবে পুরো ব্যতিক্রম পোস্ট করুন) আপনি কি ভুল আউটপুট পান?
গ্যারেথ লেটি

উত্তর:


134

আমার পরামর্শ

l = re.compile("(?<!^)\s+(?=[A-Z])(?!.\s)").split(s)

এই ডেমো পরীক্ষা করে দেখুন ।


5
আপনি যখন সংকলন ব্যবহার করবেন না তখন কি হবে?
ফিল্ডসম্যান

3
প্রতি পুনরায় ডক্স , " সবচেয়ে রেগুলার এক্সপ্রেশন অপারেশন মডিউল-স্তরের ফাংশন এবং RegexObject পদ্ধতি যেমন পাওয়া যায়। ফাংশন শর্টকাটগুলিকে আপনাকে প্রথমে একটি Regex বস্তুর কম্পাইল করার প্রয়োজন হয় না, কিন্তু কিছু ফাইন টিউনিং পরামিতি মিস করি। " আপনি ব্যবহার করতে পারেন re.split(re.split(pattern, string, maxsplit=0, flags=0))পূর্বে উল্লিখিত ডক্সে উল্লিখিত
জায়েদএইচ

57

আপনি একটি চেহারাতে ব্যবহার করতে পারেন:

re.split(r'[ ](?=[A-Z]+\b)', input)

এটি প্রতিটি জায়গাতে বিভক্ত হবে যা তারপরে উচ্চ-অক্ষরের অক্ষরের একটি স্ট্রিং যা শব্দ-সীমানায় শেষ হয়।

মনে রাখবেন যে বর্গাকার বন্ধনীগুলি কেবল পঠনযোগ্যতার জন্য এবং পাশাপাশি বাদ দেওয়া যেতে পারে।

যদি এটি যথেষ্ট হয় যে কোনও শব্দের প্রথম অক্ষর বড় হাতের অক্ষর হয় (সুতরাং আপনি যদি সামনে বিভাজন করতে চান Hello) এটি আরও সহজ হয়ে যায়:

re.split(r'[ ](?=[A-Z])', input)

এখন এটি প্রতিটি স্পেসে বিভক্ত হয় তারপরে যে কোনও উচ্চ-অক্ষরের চিঠিটি।


1
আমি কীভাবে পরিবর্তন করব re.split(r'[ ](?=[A-Z]+\b)', input)যাতে এটি বড় হাতের অক্ষর খুঁজে না পায়? যেমন এটি "এ" মেলে না? চেষ্টা করেছি re.split(r'[ ](?=[A-Z]{2,}+\b)', input)। ধন্যবাদ!

@ জেমসএগগার্স আপনার অর্থ এই যে আপনি কমপক্ষে দুটি উচ্চ-অক্ষরের অক্ষর চান, যাতে আপনি এই শব্দগুলিতে বিভক্ত হন না I? re.split(r'[ ](?=[A-Z]{2,}\b)', input)এটা করা উচিত।
মার্টিন ইন্ডার

2
আমি কমপক্ষে [ ]+বা সম্ভবত আরও \W+কিছু কেস ধরার জন্য পরামর্শ দেব । তবুও, একটি ভাল উত্তর।
জর্জি

আমি একই পদ্ধতির চেষ্টা করেছি। তবে একটি থাকা [ ]আমার পক্ষে কাজ করে না। পরিবর্তে, আমি ব্যবহার \s। আমার জন্য কাজ করা সম্পূর্ণ re.split("\s(?=[A-Z]+\s)", string)
রেজিএক্সপ্সটি

0

আপনার প্রশ্নে স্ট্রিং আক্ষরিক রয়েছে "\b[A-Z]{2,}\b"তবে তা\b অর্থ ব্যাকস্পেস হবে কারণ কোনও আর-সংশোধক নেই।

চেষ্টা করুন: r"\b[A-Z]{2,}\b"

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