2013-05-15 8 views
73

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

string = raw_input("Please enter string: ") 

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

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

+0

http: // stackoverflow।कॉम/प्रश्न/1185524/कैसे-ट्रिम-व्हाइट-स्पेस-सहित-टैब –

+4

@NicYoung, यह समान है लेकिन अलग है। 'स्ट्रिप' स्ट्रिंग के प्रारंभ और अंत में व्हाइटस्पेस को हटा देता है, न कि अंदर * स्ट्रिंग ... –

उत्तर

125

आप लाइन 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। एक ही कारण के लिए।

+0

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

+2

यह उत्तर मेरे लिए बहुत उपयोगी है क्योंकि यह '\ r' कैरिज रिटर्न का उल्लेख करता है। मैंने '\ n' को हटाने के लिए सभी विधियों का प्रयास किया है लेकिन अभी भी' \ r' वर्णों को कैप्चर नहीं कर रहा था। – Clay

+1

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

18

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

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

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

10

Xbello टिप्पणी के आधार पर अपडेट किया गया:

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

अधिक पढ़ें here

+2

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

+0

tnx का उपयोग करना होगा, उत्तर को अपडेट किया गया है। – tokhi

11

आप कोई विभाजक आर्ग है, जो (नई-पंक्तियों और टैब सहित) एक भी विभाजक के रूप में लगातार खाली स्थान के व्यवहार करेगा के साथ स्ट्रिंग विभाजित कर सकते हैं।

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

धन्यवाद, बहुत सरल और प्रभावी :) –

1

एक विधि शुरुआत/अंत में

  • अतिरिक्त सफेद अक्षर स्ट्रिंग की शुरुआत/अंत में

    • अतिरिक्त सफेद अक्षर को ध्यान में ले जा रही है: फिर एक अंतरिक्ष का उपयोग करके शामिल प्रत्येक पंक्ति
    • विभिन्न एंड-लाइन वर्ण

    यह ऐसी बहु-लाइन स्ट्रिंग लेता है जो गन्दा हो सकता है उदा।

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

    और अच्छा एक-पंक्ति स्ट्रिंग का उत्पादन

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

    यह स्ट्रिंग के बीच में संगत लाइन फ़ीड्स के मामले को संभाल नहीं करता है। आउटपुट में दो लाइन फीड के परिणामस्वरूप दो संगत रिक्त स्थान होते हैं। "Test_str = '\ nhej ho \ n aaa \ r \ n \ n एक \ n'" आज़माएं –

    संबंधित मुद्दे