पाठ की एक लंबी स्ट्रिंग से सभी पंक्ति विराम निकालें


128

मूल रूप से, मैं उपयोगकर्ता को कंसोल में टेक्स्ट की एक स्ट्रिंग इनपुट करने के लिए कह रहा हूं, लेकिन स्ट्रिंग बहुत लंबी है और इसमें कई लाइन ब्रेक शामिल हैं। मैं उपयोगकर्ता की स्ट्रिंग कैसे ले सकता हूं और पाठ की एक पंक्ति बनाने के लिए सभी पंक्ति विराम को हटा दूंगा। स्ट्रिंग प्राप्त करने की मेरी विधि बहुत सरल है।

string = raw_input("Please enter string: ")

क्या उपयोगकर्ता से स्ट्रिंग को हथियाने का एक अलग तरीका है? मैं एक मैक पर पायथन 2.7.4 चला रहा हूं।

PS स्पष्ट रूप से मैं एक noob हूँ, इसलिए भले ही कोई समाधान सबसे कुशल न हो, लेकिन जो सबसे सरल वाक्यविन्यास का उपयोग करता है वह सराहना की जाएगी।



4
@ नाइकौंग, यह समान है लेकिन अलग है। stripएक स्ट्रिंग के शुरू और अंत में व्हाट्सएप को हटाता है, स्ट्रिंग के अंदर नहीं ...
डैरन थॉमस

जवाबों:


215

आप के साथ लाइन ब्रेक कैसे दर्ज करते हैं 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'newlines का प्रतिनिधित्व करती है। और \rगाड़ी के रिटर्न का प्रतिनिधित्व करता है (यदि आप खिड़कियों पर हैं, तो आप ये प्राप्त कर सकते हैं और दूसरा replaceआपके लिए उन्हें संभाल लेगा!)।

मूल रूप से:

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

ध्यान दें, कि आपके चर को कॉल करना एक बुरा विचार है string, क्योंकि यह मॉड्यूल को छाया देता है string। एक और नाम जिसे मैं टालता लेकिन कभी-कभी इस्तेमाल करना पसंद करता file:। एक ही कारण के लिए।


पूरी तरह से काम किया, बेवकूफ सवाल के लिए खेद है! मेरा प्रारंभिक समाधान स्ट्रिंग को सूचीबद्ध करने और \ n के सभी उदाहरणों की तलाश करने के लिए था, लेकिन क्योंकि सूची में प्रति प्रविष्टि प्रविष्टि में केवल 1 वर्ण था, इसलिए खोज झूठी साबित हुई क्योंकि यह या तो एक ही सूची में दोनों या \ n नहीं मिलेगा। प्रवेश।
इयान ज़ेन

4
यह उत्तर मेरे लिए बहुत उपयोगी है क्योंकि इसमें \rगाड़ी के रिटर्न का उल्लेख है। मैंने हटाने के लिए सभी तरीकों की कोशिश की है, \nलेकिन अभी भी \rअक्षर कैप्चर नहीं कर रहा था ।
क्ले

1
यह आमतौर पर मेरे लिए काम करता है - string.replace ('\ r \ n', ''))। अधिकांश लॉग / टेक्स्ट-एडिटर फाइलें नई लाइनों के लिए इस प्रारूप का अनुसरण करती हैं।
क्वेस्ट मोंगर

1
आप चर नाम का उपयोग नहीं करने की ओर इशारा करते हैं string, लेकिन इसी तरह के कारण से आप चर नाम का उपयोग नहीं करना चाहते हैं str
tscizzle

2
@information_interchange यह दृष्टिकोण उन लिनक्स फाइलों पर काम करता है जो हैं \nलेकिन नहीं \r\n
नाउमेनन

45

आप स्ट्रिंग प्रतिस्थापन का उपयोग करके देख सकते हैं:

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

मुझे कुछ ग्रंथों के साथ समस्या थी। मैंने rstrip () का उपयोग करने की कोशिश की, लेकिन काम नहीं किया। मैं प्रतिस्थापित () का उपयोग करता हूं।
ब्रूनो गोम्स

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


बहुत अच्छी विचारधारा, क्योंकि सामान्य भी टैब, डबल स्पेस और इतने पर +1
daitangio

15

Xbelloटिप्पणी के आधार पर अद्यतन :

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

यहाँ और पढ़ें


3
मुझे बस इससे काट दिया गया है। यदि आप \ n को rstrip निर्दिष्ट करते हैं, तो \ r विफल हो जाता है। यदि आप कुछ भी नहीं निर्दिष्ट करते हैं, तो रिक्त स्थान, \ t और संभवतः अन्य को छंटनी की जाती है। आप का उपयोग करने केrstrip("\r\n")
xbello

1
एक तार rstrip('\r\n')था जहाँ सिर्फ पर्याप्त नहीं था और उसके साथ जाना था:my_string.rstrip('\r\n').replace('\n', ' ')
MMT

8

एक अन्य विकल्प regex है:

>>> 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 ho \ n aaa \ r \ n \ na \ n' आज़माएँ"
माइक ग्लीन

2

यदि कोई उपयोग करने का निर्णय लेता है replace, तो आपको r'\n'इसके बजाय प्रयास करना चाहिए'\n'

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

क्यों? मुझे अस्पष्ट रूप से याद है कि यह एक अच्छा विचार क्यों है, लेकिन हमें इसे दस्तावेज करने की आवश्यकता है।
मार्टिन बर्च

1
मेरे मामले में, मुझे ऐसा करने की आवश्यकता थी: 1. डीबी से HTML कोड प्राप्त करें। HTML से आवश्यक पाठ प्राप्त करें। 3. पाठ से सभी नई पंक्ति निकालें। एक स्प्रेडशीट दस्तावेज़ में संपादित पाठ डालें और यह तब तक ठीक से काम नहीं करता, जब तक कि मैं नहीं। इस्तेमाल किया r("कच्चे स्ट्रिंग शाब्दिक")। दुर्भाग्य से, मुझे पता नहीं क्यों)
अनार सलीमखानोव

1

Rstrip के साथ समस्या यह है कि यह सभी मामलों में काम नहीं करता है (जैसा कि मैंने खुद कुछ देखा है)। इसके बजाय आप उपयोग कर सकते हैं - पाठ = text.replace ("\ n", "") यह एक स्थान के साथ सभी नई पंक्ति \ n को हटा देगा।

अग्रिम लोगों में अपने upvotes के लिए धन्यवाद।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.