2017-07-24 73 views
-1

我想更换一些文字与别的东西,取决于Python3原文。例如,说我有"[[procedural programming|procedural programming languages]]",我需要更换与后来的文字,所以才procedural programming languages涉及替换原始字符串

一般情况下,我需要一个函数,它接受一个字符串和一个功能和应用功能的字符串,然后替换它。例如,扭转了字符串可以做像这样:

text = "123456 123456 84708467 11235" 
new_text = special_replace(text, lambda x: x[::-1]) 

>>> 654321 654321 84708467 11235 

或者前面的例子:

text = "[[procedural programming|procedural programming languages]] [meow|woof]" 
new_text = specail_replace(text, lambda x: x.replace("[[", "").replace("]]","").split("|")[1]) 

>>> procedural programming languages [meow|woof] 
+2

我不明白你的'special_replace'做什么那是你传递的功能有所不同。为什么不直接调用lambda? –

+0

我刚刚在这个例子中意识到它并不是很清楚。添加一个编辑。 –

+0

我想你应该熟悉一下're.sub'功能(与一般的正则表达式)。 –

回答

2

您可以创建一个正则表达式,并使用re.sub与组引用来替换它们:

>>> text = "[[procedural programming|procedural programming languages]] [meow|woof]" 
>>> p = r"\[\[.*?\|(.*?)\]\]" 
>>> re.findall(p, text) 
['procedural programming languages'] 
>>> re.sub(p, r"\1", text) 
'procedural programming languages [meow|woof]' 

请注意,[,|]都必须转义。这里(.*?)是用于第二术语捕获组,和\1引用该组中的替换字符串。

对于更复杂的东西,比如也扭转了组,您可以使用一个回调函数:

>>> re.sub(p, lambda m: m.group(1)[::-1], text) 
'segaugnal gnimmargorp larudecorp [meow|woof]' 
+0

谢谢,正是我需要的! –