[英]Replace a substring with two different strings depending on where they are
假设我有一个带星号的字符串:
myvar = "this is an *italicized* substring"
我想更换*italicized*
用{i}italicized{/i}
的项目我的工作,txt2rpy,但我不知道怎么有两个不同的子取决于什么命令他们在被替换。
您可以使用正则表达式来替换整个模式:
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
创建一个用于解析的循环并保持一个计数器进行跟踪,每当计数器保持第二个标签并用第一个标签替换奇数时。
你能不能用一个 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:]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.