निकटतम शायद है:
somere.sub(lambda m: replacements[m.group()], text)
उदाहरण के लिए
:
>>> za = re.compile('z\w')
>>> za.sub(lambda m: dict(za='BLU', zo='BLA')[m.group()], 'fa za zo bu')
'fa BLU BLA bu'
एक
.get
बजाय
[]
यदि आप मिलान जो
replacements
में याद कर रहे हैं के लिए एक डिफ़ॉल्ट की आपूर्ति करना चाहते हैं -indexing साथ
।
संपादित करें: वास्तव में कौन सी रिक वास्तव में चाहता है कि '\d+S'
जैसे नियमित अभिव्यक्ति पैटर्न, और (उम्मीद है) निरंतर स्ट्रिंग मान (उम्मीद है कि w/o बैक्रेरेंस) के रूप में लिया जाना चाहिए। रसोई की किताब नुस्खा इस उद्देश्य के लिए अनुकूलित किया जा सकता है:
def dict_sub(d, text):
""" Replace in 'text' non-overlapping occurences of REs whose patterns are keys
in dictionary 'd' by corresponding values (which must be constant strings: may
have named backreferences but not numeric ones). The keys must not contain
anonymous matching-groups.
Returns the new string."""
# Create a regular expression from the dictionary keys
regex = re.compile("|".join("(%s)" % k for k in d))
# Facilitate lookup from group number to value
lookup = dict((i+1, v) for i, v in enumerate(d.itervalues()))
# For each match, find which group matched and expand its value
return regex.sub(lambda mo: mo.expand(lookup[mo.lastindex]), text)
उदाहरण उपयोग:
d={'\d+S': 'wot', '\d+T': 'zap'}
t='And 23S, and 45T, and 66T but always 029S!'
print dict_sub(d, t)
का उत्सर्जन करता है:
And wot, and zap, and zap but always wot!
आप lookup
और बस mo.expand(d.values()[mo.lastindex-1])
का उपयोग निर्माण से बचने के सकता है, लेकिन है कि हो सकता है d
बहुत छोटा है और कई मैचों (माफ करना, दोनों दृष्टिकोणों को सटीक रूप से मापा/बेंचमार्क नहीं किया गया है, इसलिए यह एक छोटा सा धीमा है, इसलिए यह है केवल अनुमान है;-)।
replacements = dict(hello='goodbye', good='bad')
s = "hello, good morning";
for old, new in replacements.items():
s = s.replace(old, new)
आप कई स्थानों पर जहां पीएचपी कार्यों मूल्यों की एक सरणी स्वीकार करते हैं और कोई प्रत्यक्ष अजगर बराबर है मिलेगा, लेकिन यह बहुत सरणियों के साथ काम करने के लिए आसान है (सूचियां:
यह केवल एक regex का समर्थन करता है हो जाएगा बारे में है, मुझे लगता है कि आप कर सकते हैं अगर आप वास्तव में प्रतिस्थापन और पैटर्न दोनों को चाहते हैं तो एक्टिवस्टेट से पकड़े गए फ़ंक्शन से सरल नहीं होगा। क्या आप? –
एक पास में कई स्ट्रिंग प्रतिस्थापन करने के लिए, मुझे वह नुस्खा पसंद है, इसलिए मैंने इसे पायथन कुकबुक के लिए चुना है, http://books.google.com/books?id=Q0s6Vgb98CQC&pg=PA38&dq=xavier+defrang&ei=k5okSvPbNILClQSk2LWvBw देखें (मुझे लगता है कि चर्चा अन्ना और मैंने कहा कि कुछ मूल्य जोड़ता है, लेकिन मैं निश्चित रूप से पक्षपाती हूं)। मैं पूछे गए सटीक प्रश्न पर अधिक सीधे प्रतिक्रिया देने की कोशिश कर रहा था - एक पूरी तरह से सामान्य आरई और प्रतिस्थापन का एक दिया गया निर्देश। –
मुझे लगता है कि मूल प्रश्न को नुस्खा द्वारा बेहतर उत्तर दिया गया है, क्योंकि PHP की preg_replace दोनों regexps और प्रतिस्थापन स्वीकार करता है। –