अजगर स्ट्रिंग में अंतिम सीमांकक पर विभाजन?


203

स्ट्रिंग में सीमांकक की अंतिम घटना पर एक स्ट्रिंग को विभाजित करने के लिए अनुशंसित पायथन मुहावरा क्या है ? उदाहरण:

# instead of regular split
>> s = "a,b,c,d"
>> s.split(",")
>> ['a', 'b', 'c', 'd']

# ..split only on last occurrence of ',' in string:
>>> s.mysplit(s, -1)
>>> ['a,b,c', 'd']

mysplitदूसरा तर्क यह है कि परिसीमन की घटना विभाजित होना है। नियमित सूची अनुक्रमण की तरह, -1अंत से अंतिम अर्थ है। यह कैसे किया जा सकता है?

जवाबों:


355

उपयोग .rsplit() या .rpartition()इसके बजाय:

s.rsplit(',', 1)
s.rpartition(',')

str.rsplit()आपको यह निर्दिष्ट करने की अनुमति देता है कि विभाजित करने के लिए कितनी बार, जबकि str.rpartition()केवल एक बार विभाजन होता है , लेकिन हमेशा तत्वों की एक निश्चित संख्या (उपसर्ग, सीमांकक और पोस्टफ़िक्स) देता है और एकल विभाजन मामले के लिए तेज़ होता है।

डेमो:

>>> s = "a,b,c,d"
>>> s.rsplit(',', 1)
['a,b,c', 'd']
>>> s.rsplit(',', 2)
['a,b', 'c', 'd']
>>> s.rpartition(',')
('a,b,c', ',', 'd')

दोनों विधियाँ स्ट्रिंग के दाईं ओर से विभाजित होने लगती हैं; str.rsplit()दूसरे तर्क के रूप में एक अधिकतम देकर , आप केवल दाहिने हाथ की सबसे अधिक घटनाओं को विभाजित करने के लिए मिलते हैं।


19

आप rsplit का उपयोग कर सकते हैं

string.rsplit('delimeter',1)[1]

स्ट्रिंग को रिवर्स से प्राप्त करने के लिए।


5

मैंने सिर्फ मनोरंजन के लिए ऐसा किया

    >>> s = 'a,b,c,d'
    >>> [item[::-1] for item in s[::-1].split(',', 1)][::-1]
    ['a,b,c', 'd']

सावधानी : नीचे दी गई पहली टिप्पणी का संदर्भ लें जहां यह उत्तर गलत हो सकता है।


2
'सिर्फ मनोरंजन के लिए' लेकिन यह भी बहुत गलत है, क्योंकि अगर सीमांकक केवल एक चरित्र या दोहराया चरित्र नहीं है, तो आपके विभाजन विभाजित होंगे, सबसे अच्छा, गलत बिंदुओं को विभाजित करने के लिए।
मार्टिन पीटर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.