是否可以使用正则表达式(或更通用的模板)来定义变量?

时间:2016-08-02 15:43:28

标签: python regex templates pattern-matching

让我们考虑以下模板:

*aaa*bbb*

它应该返回包含aaabbb的所有字符串作为子字符串(bbb之后aaa的限制)。

我希望在aaaaaa以及(3)之后的bbb,(2)之前使用(1)子字符串的可能性bbb(其中一些子字符串可能为空)。所以,基本上我想知道每个明星背后的立场。更详细地说,我想使用这三个子字符串来构造一个新的字符串(输出)。

例如,我可能想要交换第一个和第二个子字符串,在它们之间添加ccc并删除最后一个子字符串(以及aaabbb) 。我想做的事情可以用以下更正式的方式表达:

{?x1}aaa{?x2}bbb{?x3} -> {?x2}ccc{?x1}

请注意,我已将*替换为{?x1}{?x2}{?x1}。通过这种方式,我定义了以后使用的三个变量。

例如,如果我输入XXXaaaYYYbbbZZZ,我应该生成以下字符串作为输出:YYYcccXXX

ADDED

我的问题是,是否有灵活的模板语言也允许定义“变量”(原始输入序列的一部分可用于定义新的输出序列)。我应该补充一点,我需要一个Python解决方案。

1 个答案:

答案 0 :(得分:1)

听起来你想要引用,它是大多数正则表达式库的一部分,包括Python。

ccc_str = re.sub("(.*)aaa(.*)bbb(.*)", r"\2ccc\1", "XXXaaaYYYbbbZZZ")