替换涉及原始字符串

时间:2017-07-24 11:49:57

标签: python string replace

我试图用一些取决于Python3中原始文本的其他文本替换一些文本。例如,假设我有 private void updateViewLayout(final HomeUI UI, final JPanel paneeelee){ final JPanel body = UI.getBody(); //this is the JFrame body panel and must be of type cardLayout System.out.println("Page Loader Changing View"); new SwingWorker<Object, Object>() { @Override protected Object doInBackground() throws Exception { body.removeAll();//remove all visible panel before body.add(paneeelee); body.revalidate(); body.repaint(); return null; } @Override protected void done() { UI.getLoader().setVisible(false); } }.execute(); } ,我需要将其替换为后面的文字,因此只需"[[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

1 个答案:

答案 0 :(得分: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]'