software - python tutorial




पायथन में राइट-टू-लेफ्ट स्ट्रिंग की जगह? (5)

मैं पायथन में एक स्ट्रिंग की जगह करना चाहता हूं, लेकिन केवल दाएं से बाएं जाने वाला पहला उदाहरण है। एक आदर्श दुनिया में मैं होता:

myStr = "mississippi"
print myStr.rreplace("iss","XXX",1)

> missXXXippi

ऐसा करने का सबसे अच्छा तरीका क्या है, यह देखते हुए कि rreplace मौजूद नहीं है?


आप str.rpartition() उपयोग भी कर सकते हैं जो स्ट्रिंग को सही से अलग विभाजक द्वारा विभाजित करता है और एक टपल लौटाता है:

myStr = "mississippi"

first, sep, last = myStr.rpartition('iss')
print(first + 'XXX' + last)
# missXXXippi

आप एक स्ट्रिंग को उल्टा कर सकते हैं जैसे:

myStr[::-1]

बदलने के लिए बस .replace जोड़ें:

print myStr[::-1].replace("iss","XXX",1)

हालाँकि अब आपका स्ट्रिंग पीछे की ओर है, इसलिए इसे फिर से उल्टा करें:

myStr[::-1].replace("iss","XXX",1)[::-1]

और आपने कल लिया। यदि आपके बदले हुए तार स्थिर हैं तो उन्हें ओवरहेड को कम करने के लिए फ़ाइल में रिवर्स करें। यदि नहीं, तो एक ही चाल काम करेगी।

myStr[::-1].replace("iss"[::-1],"XXX"[::-1],1)[::-1]

rsplit और join का उपयोग एक rreplace के प्रभावों को अनुकरण करने के लिए किया जा सकता है

>>> 'XXX'.join('mississippi'.rsplit('iss', 1))
'missXXXippi'

def rreplace(s, old, new):
    try:
        place = s.rindex(old)
        return ''.join((s[:place],new,s[place+len(old):]))
    except ValueError:
        return s

>>> re.sub(r'(.*)iss',r'\1XXX',myStr)
'missXXXippi'

रेगेक्स इंजन सभी स्ट्रिंग को कोज़्यूम करता है और फिर अनटील आइस को पीछे करना शुरू करता है। फिर यह आवश्यक पैटर्न के साथ पाया स्ट्रिंग को बदलता है।

कुछ गति tests

[::-1] साथ समाधान तेजी से निकलता है।

re समाधान केवल लंबे समय तक तार (1 मिलियन से अधिक प्रतीकों) के लिए तेज था।







python