我试图用一些取决于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
答案 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]'