4 回答
![?](http://img1.sycdn.imooc.com/545868cd00013bbb02200220-100-100.jpg)
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
![?](http://img1.sycdn.imooc.com/5458655200013d9802200220-100-100.jpg)
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>)替换完整匹配项,并用您想要的字符包围。
![?](http://img1.sycdn.imooc.com/54584dd900014f6c02200220-100-100.jpg)
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:]
添加回答
举报