您可以使用正则表达式来替换整个模式:re.sub(r'\*(.*?)\*', r'{i}\1{/i}', myvar)在正则表达式中:\*匹配文字*(使用两次)(.*?)匹配任意数量的任意(非换行)字符,尽可能少 - 它也在捕获组中在替换中:{i}和{/i}都是文字\1意味着将内容放入第一个(在本例中是唯一的)捕获组中这给出:>>> import re>>> myvar = "this is an *italicized* substring">>> print(re.sub(r'\*(.*?)\*', r'{i}\1{/i}', myvar))this is an {i}italicized{/i} substring如果该模式多次出现,这也将起作用:myvar = "this is an *italicized* substring, and here is *another* one"会给this is an {i}italicized{/i} substring, and here is {i}another{/i} one
您可以使用re.sub捕获组来实现:import retxt = "this is an *italicized* substring"res = re.sub(r"\*([^*]+)\*", "{i}\g<1>{/i}", txt)将有res:this is an {i}italicized{/i} substring这种模式非常基本:它匹配一个文字*,然后是字符而不是星号,然后是另一个文字*。这里的要点是我们使用捕获组来捕获单词部分。然后,我们只需用我们保存的单词(通过 访问\g<1>)替换完整匹配项,并用您想要的字符包围。