मुझे यह पता लगाने की जरूरत है कि मैं केवल एक बार पाइथन में अक्षरों को कैसे बदल सकता हूं।

उदाहरण:

s = "a b c d b"

# change letter 'a' to "bye" and letter 'b' to "hay"
# .replace function is problematic because:

s = s.replace('a', "bye")
print(s)

# will print to "bye b c d b" now if I try to replace letter b 
# it will replace the first b of "bye" aswell thats not what I want
# output I want: "bye hay c d hay"

किसी भी मदद की सराहना की जाती है

1
HaskellPlease 2 नवम्बर 2020, 20:18

3 जवाब

सबसे बढ़िया उत्तर

यदि आप किसी ऐसे चरित्र के बारे में जानते हैं जो आपकी मूल स्ट्रिंग में मौजूद नहीं है, तो सबसे आसान तरीका (अतिरिक्त पैकेज की आवश्यकता नहीं है) सभी वर्णों को उन 'अस्थायी' वर्णों से बदलना होगा, और फिर उन अस्थायी वर्णों को प्रतिस्थापित करना होगा। उदाहरण के लिए:

s = 'a b c d b'

s = s.replace('a', '\0').replace('b', '\1') # Put temporary characters
s = s.replace('\0', 'bye').replace('\1', 'hay') # Replace temporary characters
1
Collin Heist 2 नवम्बर 2020, 20:27

आप निम्न प्रकार से re.sub का उपयोग कर सकते हैं:

import re

s = "a b c d b"


def repl(e, lookup={"a": "bye", "b": "hay"}):
    return lookup.get(e.group(), e.group)


result = re.sub("[ab]", repl, s)
print(result)

आउटपुट

bye hay c d hay

sub के दस्तावेज़ीकरण का हवाला देते हुए:

प्रतिस्थापन प्रतिकृति द्वारा स्ट्रिंग में पैटर्न की सबसे बाईं गैर-अतिव्यापी घटनाओं को प्रतिस्थापित करके प्राप्त स्ट्रिंग को वापस करें। यदि पैटर्न नहीं मिलता है, तो स्ट्रिंग अपरिवर्तित लौटा दी जाती है। उत्तर एक स्ट्रिंग या एक फ़ंक्शन हो सकता है

5
Dani Mesejo 2 नवम्बर 2020, 20:24

मुझे re.sub का उपयोग करने का दानी मेसेजो का सुझाव पसंद है, लेकिन मुझे इसका उपयोग करना आसान लगता है जब एक सुविधाजनक फ़ंक्शन में लपेटा जाता है:

import re

def multi_replace(text, changes):
    return re.sub(
        '|'.join(changes),
        lambda match: changes[match.group()],
        text
    )
    
text = 'a b c d b'
changes = {'a': 'bye', 'b': 'hay'}

text = multi_replace(text, changes)
print(text)

आउटपुट:

bye hay c d hay

आप बस multi_replace() को इनपुट के रूप में किसी भी टेक्स्ट और परिवर्तनों के शब्दकोश के साथ कॉल कर सकते हैं, यहां तक ​​​​कि गतिशील रूप से जेनरेट किए गए भी, और यह खुशी से अपडेट किए गए टेक्स्ट को वापस कर देगा।

-1
CrazyChucky 2 नवम्बर 2020, 21:09