मैं अपनी नियमित अभिव्यक्ति आधारित उत्तर को एक उत्तर से दूसरे पोस्ट की टिप्पणियों में पोस्ट कर रहा हूं। मुझे लगता है कि उपयोग re
करने से इस समस्या का एक अधिक स्पष्ट समाधान है str.rstrip
।
>>> import re
यदि आप एक या अधिक अनुगामी नईलाइन वर्ण हटाना चाहते हैं :
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
यदि आप हर जगह (केवल अनुगामी नहीं) नई लाइनें निकालना चाहते हैं:
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
आप केवल 1-2 अनुगामी न्यू लाइन वर्ण निकालना चाहते हैं (यानी, \r
, \n
, \r\n
, \n\r
, \r\r
, \n\n
)
>>> re.sub(r'[\n\r]{1,2}$', '', '\nx\r\n\r\n')
'\nx\r'
>>> re.sub(r'[\n\r]{1,2}$', '', '\nx\r\n\r')
'\nx\r'
>>> re.sub(r'[\n\r]{1,2}$', '', '\nx\r\n')
'\nx'
मुझे लगता है कि ज्यादातर लोग वास्तव में यहां क्या चाहते हैं, एक अनुगामी न्यूलाइन चरित्र की सिर्फ एक घटना को दूर करना है, \r\n
या तो \n
और कुछ भी नहीं।
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\n\n', count=1)
'\nx\n'
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\r\n\r\n', count=1)
'\nx\r\n'
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\r\n', count=1)
'\nx'
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\n', count=1)
'\nx'
( ?:
एक गैर-कब्जा समूह बनाने के लिए है।)
(वैसे यह है नहीं क्या '...'.rstrip('\n', '').rstrip('\r', '')
करता है जो इस सूत्र पर ठोकर। दूसरों के लिए स्पष्ट नहीं हो सकता है str.rstrip
संभव के रूप में पीछे चल रहे पात्रों में से कई के रूप में स्ट्रिप्स, इसलिए इस तरह की स्ट्रिंग foo\n\n\n
की एक झूठी सकारात्मक में परिणाम होगा foo
आप की रक्षा करना चाहता था हो सकता है, जबकि एकल अनुगामी छीनने के बाद अन्य नई सुर्खियाँ।)