为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

噜噜哒 2023-06-27 16:15:08
假设我有一个带有星号的字符串:myvar = "this is an *italicized* substring"我想将我正在处理的项目替换*italicized*为{i}italicized{/i}txt2rpy,但我不确定如何根据两个不同的子字符串的出现顺序来替换它们。
查看完整描述

4 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

您可以使用正则表达式来替换整个模式:

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


查看完整回答
反对 回复 2023-06-27
?
慕慕森

TA贡献1856条经验 获得超17个赞

您可以使用re.sub捕获组来实现:

import re


txt = "this is an *italicized* substring"


res = re.sub(r"\*([^*]+)\*", "{i}\g<1>{/i}", txt)

将有res:


this is an {i}italicized{/i} substring

这种模式非常基本:它匹配一个文字*,然后是字符而不是星号,然后是另一个文字*。这里的要点是我们使用捕获组来捕获单词部分。


然后,我们只需用我们保存的单词(通过 访问\g<1>)替换完整匹配项,并用您想要的字符包围。

查看完整回答
反对 回复 2023-06-27
?
呼如林

TA贡献1798条经验 获得超3个赞

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



查看完整回答
反对 回复 2023-06-27
?
DIEA

TA贡献1820条经验 获得超2个赞

你可以使用 for 循环并说


myvar = "this is an *italicized* substring"

positions = []

for x in range(len(myvar)):

    if myvar[x] == "*":

       positions.append(x)

inAsteriks = myvar[0:positions[0]] + "{i}" + myvar[positions[0]+1:positions[1]] + "{/i}" + myvar[positions[0]+1:]



查看完整回答
反对 回复 2023-06-27
  • 4 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信