让我们考虑以下模板:
*aaa*bbb*
它应该返回包含aaa
和bbb
的所有字符串作为子字符串(bbb
之后aaa
的限制)。
我希望在aaa
和aaa
以及(3)之后的bbb
,(2)之前使用(1)子字符串的可能性bbb
(其中一些子字符串可能为空)。所以,基本上我想知道每个明星背后的立场。更详细地说,我想使用这三个子字符串来构造一个新的字符串(输出)。
例如,我可能想要交换第一个和第二个子字符串,在它们之间添加ccc
并删除最后一个子字符串(以及aaa
和bbb
) 。我想做的事情可以用以下更正式的方式表达:
{?x1}aaa{?x2}bbb{?x3} -> {?x2}ccc{?x1}
请注意,我已将*
替换为{?x1}
,{?x2}
和{?x1}
。通过这种方式,我定义了以后使用的三个变量。
例如,如果我输入XXXaaaYYYbbbZZZ
,我应该生成以下字符串作为输出:YYYcccXXX
ADDED
我的问题是,是否有灵活的模板语言也允许定义“变量”(原始输入序列的一部分可用于定义新的输出序列)。我应该补充一点,我需要一个Python解决方案。
答案 0 :(得分:1)
听起来你想要引用,它是大多数正则表达式库的一部分,包括Python。
ccc_str = re.sub("(.*)aaa(.*)bbb(.*)", r"\2ccc\1", "XXXaaaYYYbbbZZZ")