根据子字符串的位置,将子字符串替换为两个不同的字符串

假设我有一个带有星号的字符串:

myvar = "this is an *italicized* substring"

我想将我正在处理的项目替换*italicized*{i}italicized{/i}txt2rpy,但我不确定如何根据两个不同的子字符串的出现顺序来替换它们。


噜噜哒
浏览 168回答 4
4回答

手掌心

您可以使用正则表达式来替换整个模式: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>)替换完整匹配项,并用您想要的字符包围。

呼如林

创建一个循环进行解析并保留一个计数器进行跟踪,每当计数器为偶数时,保留第二个标签并用第一个标签替换奇数标签。

DIEA

你可以使用 for 循环并说myvar = "this is an *italicized* substring"positions = []for x in range(len(myvar)):&nbsp; &nbsp; if myvar[x] == "*":&nbsp; &nbsp; &nbsp; &nbsp;positions.append(x)inAsteriks = myvar[0:positions[0]] + "{i}" + myvar[positions[0]+1:positions[1]] + "{/i}" + myvar[positions[0]+1:]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python