পাঠ্যের দীর্ঘ স্ট্রিং থেকে সমস্ত লাইন বিরতি সরান


128

মূলত, আমি ব্যবহারকারীকে কনসোলটিতে পাঠ্যের একটি স্ট্রিং ইনপুট করতে বলছি, তবে স্ট্রিংটি খুব দীর্ঘ এবং এতে অনেকগুলি লাইন ব্রেক অন্তর্ভুক্ত রয়েছে। আমি কীভাবে ব্যবহারকারীর স্ট্রিং নেব এবং পাঠ্যের একক লাইন তৈরি করতে সমস্ত লাইন ব্রেকগুলি মুছব। স্ট্রিং অর্জনের জন্য আমার পদ্ধতিটি খুব সহজ।

string = raw_input("Please enter string: ")

ব্যবহারকারীর কাছ থেকে স্ট্রিংটি ধরার কি আলাদা উপায় আছে? আমি ম্যাকে পাইথন ২.7.৪ চালাচ্ছি।

পিএস স্পষ্টতই আমি একজন নুব, সুতরাং সমাধানটি সবচেয়ে দক্ষ না হলেও, সবচেয়ে সহজ বাক্য গঠন ব্যবহার করা প্রশংসা করবে।



4
@ নিক ইউইং, এটি একই তবে ভিন্ন। stripস্ট্রিংয়ের অভ্যন্তরে নয়, স্ট্রিংয়ের শুরু এবং শেষে হোয়াইটস্পেস সরিয়ে দেয় ...
ড্যারেন টমাস

উত্তর:


214

আপনি লাইন বিরতি দিয়ে কীভাবে প্রবেশ করবেন raw_input? তবে একবারে এর মধ্যে কয়েকটি অক্ষরের স্ট্রিং হয়ে গেলে আপনি replaceসেগুলি থেকে মুক্তি পেতে চান ।

>>> mystr = raw_input('please enter string: ')
please enter string: hello world, how do i enter line breaks?
>>> # pressing enter didn't work...
...
>>> mystr
'hello world, how do i enter line breaks?'
>>> mystr.replace(' ', '')
'helloworld,howdoienterlinebreaks?'
>>>

উপরের উদাহরণে, আমি সমস্ত স্পেস প্রতিস্থাপন করেছি। স্ট্রিংটি '\n'নতুন লাইনের প্রতিনিধিত্ব করে। এবং \rক্যারেজ রিটার্নের প্রতিনিধিত্ব করে (যদি আপনি উইন্ডোতে থাকেন তবে আপনি সম্ভবত এটি পেয়ে যাচ্ছেন এবং দ্বিতীয়টি replaceআপনাকে এগুলি পরিচালনা করবে!)।

মূলত:

# you probably want to use a space ' ' to replace `\n`
mystring = mystring.replace('\n', ' ').replace('\r', '')

এটিও নোট করুন, আপনার ভেরিয়েবলকে কল করা এটি একটি খারাপ ধারণা string, কারণ এটি মডিউলটিকে ছায়া দেয় string। আরেকটি নাম আমি এড়াতে চাই তবে কখনও কখনও ব্যবহার করতে চাই: file। একই কারণে।


নিখুঁতভাবে কাজ করেছেন, বোকা প্রশ্নের জন্য দুঃখিত! আমার প্রাথমিক সমাধানটি ছিল স্ট্রিংটি তালিকাভুক্ত করা এবং \ n এর সমস্ত দৃষ্টান্ত সন্ধান করা, তবে তালিকার তালিকায় তালিকার জন্য কেবলমাত্র 1 টি অক্ষর ছিল, তাই অনুসন্ধানটি প্রত্যাখ্যান করে চলেছে কারণ এটি \ বা n উভয়ই খুঁজে পেতে পারে তবে একই তালিকায় উভয়ই নয় would এন্ট্রি।
ইয়ান জেন 15'13

4
এই উত্তরটি আমার পক্ষে খুব সহায়ক কারণ এতে \rগাড়ীর ফেরতের উল্লেখ রয়েছে । আমি মুছে ফেলার জন্য সমস্ত পদ্ধতি চেষ্টা করেছি \nকিন্তু এখনও \rচরিত্রগুলি ক্যাপচার করিনি ।
ক্লে

1
এটি সাধারণত আমার জন্য কাজটি করে - স্ট্রিং.রেপ্লেস ('\ r \ n', ''))। বেশিরভাগ লগ / পাঠ্য-সম্পাদক ফাইলগুলি নতুন লাইনের জন্য এই ফর্ম্যাটটি অনুসরণ করে।
কোয়েস্ট Monger

1
আপনি চলক নামটি ব্যবহার না করে উল্লেখ করেছেন stringতবে একই কারণে আপনি চলক নামটি ব্যবহার করতে চান না str
tscizzle

2
@information_interchange আছে লিনাক্স ফাইল এই পদ্ধতির কাজ \nকিন্তু \r\n
নুমেনন

45

আপনি স্ট্রিং রিপ্লেসটি ব্যবহার করে দেখতে পারেন:

string = string.replace('\r', '').replace('\n', '')

কিছু পাঠ্য নিয়ে আমার সমস্যা ছিল। আমি স্ট্রিপ () ব্যবহার করার চেষ্টা করেছি, তবে কাজ হয়নি। আমি প্রতিস্থাপন () ব্যবহার করি।
ব্রুনো গোমেস

25

আপনি স্ট্রিংটি কোনও বিভাজক আরগ ছাড়াই বিভক্ত করতে পারেন, যা একক বিভাজক হিসাবে একটানা শ্বেত স্পেস হিসাবে বিবেচিত হবে (নিউলাইন এবং ট্যাবগুলি সহ)। তারপরে একটি স্থান ব্যবহার করে যোগদান করুন:

In : " ".join("\n\nsome    text \r\n with multiple whitespace".split())
Out: 'some text with multiple whitespace'

https://docs.python.org/2/library/stdtypes.html#str.split


খুব সুন্দর আদর্শ, কারণ ট্যাবগুলি, ডাবল স্পেসগুলি এবং এই
জাতীয়করণগুলিকেও সাধারণকরণ

15

Xbelloমন্তব্যের ভিত্তিতে আপডেট হয়েছে :

string = my_string.rstrip('\r\n')

এখানে আরও পড়ুন


3
আমি এই দ্বারা কামড়েছি। যদি আপনি rst n স্ট্রিপ-এ নির্দিষ্ট করেন তবে \ r ব্যর্থ হয়। যদি আপনি কিছুই, স্পেস, and t এবং সম্ভবত অন্যটি ছাঁটাই না করে নির্দিষ্ট না করেন। আপনাকে ব্যবহার করতে হবেrstrip("\r\n")
xbello

1
একটি স্ট্রিং ছিল যেখানে কেবল rstrip('\r\n')যথেষ্ট ছিল না এবং সাথে যেতে হয়েছিল:my_string.rstrip('\r\n').replace('\n', ' ')
এমএমটি

8

আরেকটি বিকল্প হ'ল রেজেক্স:

>>> import re
>>> re.sub("\n|\r", "", "Foo\n\rbar\n\rbaz\n\r")
'Foobarbaz'

একটানা লাইনব্রেকগুলি কীভাবে মেলে যায় সে সম্পর্কে আরও তথ্য দুর্দান্ত হতে পারে r'[\n\r]+'বা r'\s+'কোনও একক স্পেসের সাথে কোনও হোয়াইটস্পেস প্রতিস্থাপন করতেও ।
রিসাদিনহা

3

বিবেচনায় নেওয়া একটি পদ্ধতি

  • স্ট্রিংয়ের শুরু / শেষে অতিরিক্ত সাদা অক্ষর
  • প্রতিটি লাইনের শুরুতে / শেষে অতিরিক্ত সাদা অক্ষর
  • বিভিন্ন শেষ লাইন অক্ষর

এটি এমন একটি বহু-লাইন স্ট্রিং নেয় যা অগোছালো হতে পারে

test_str = '\nhej ho \n aaa\r\n   a\n '

এবং দুর্দান্ত এক-লাইন স্ট্রিং উত্পাদন করে

>>> ' '.join([line.strip() for line in test_str.strip().splitlines()])
'hej ho aaa a'

আপডেট: রিডানড্যান্ট স্পেস উত্পাদনকারী একাধিক নতুন-লাইন অক্ষর ঠিক করতে:

' '.join([line.strip() for line in test_str.strip().splitlines() if line.strip()])

এটি নিম্নলিখিতগুলির জন্যও কাজ করে test_str = '\nhej ho \n aaa\r\n\n\n\n\n a\n '


এটি স্ট্রিংয়ের মাঝখানে সংলগ্ন লাইন ফিডগুলির ক্ষেত্রে পরিচালনা করে না। দুটি লাইন ফিড ফলাফল আউটপুট দুটি স্বতন্ত্র ফাঁকা ফলাফল। ব্যবহার করে দেখুন "test_str = '\ nhej হো \ N AAA পান \ r \ n \ n \ N'"
মাইক Gleen

2

যদি কেউ ব্যবহার করার সিদ্ধান্ত নেয় তবে আপনার পরিবর্তে replaceচেষ্টা r'\n'করা উচিত'\n'

mystring = mystring.replace(r'\n', ' ').replace(r'\r', '')

কেন? আমি অস্পষ্টভাবে মনে করি কেন এটি একটি ভাল ধারণা, তবে আমাদের এটি ডকুমেন্ট করা দরকার।
মার্টিন বুর্চ

1
আমার ক্ষেত্রে, আমার এটি করা দরকার: ১. ডিবি থেকে এইচটিএমএল কোড পান ২. এইচটিএমএল থেকে প্রয়োজনীয় পাঠ্য পান text. পাঠ্য থেকে সমস্ত নতুন লাইন সরান 4.. একটি স্প্রেডশিট নথিতে সম্পাদিত পাঠ্য সন্নিবেশ করুন এবং আমি সঠিকভাবে কাজ করি না যদি না আমি ব্যবহৃত r("কাঁচা স্ট্রিং আক্ষরিক")। দুর্ভাগ্যক্রমে, আমার কোনও ধারণা নেই কেন)
আনার সেলিমখানভ

1

স্ট্রিপ-এর সমস্যাটি হ'ল এটি সব ক্ষেত্রে কার্যকর হয় না (যেমন আমি নিজেই খুব কম দেখেছি)। পরিবর্তে আপনি ব্যবহার করতে পারেন - পাঠ্য = পাঠ্য.রেজ ("\ n", "") এটি স্থান সহ সমস্ত নতুন লাইন remove n সরিয়ে ফেলবে।

আপনার অগ্রগতির জন্য অগ্রিম বলছি ধন্যবাদ।

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