如何在Python中的括号内附加一个字符?

时间:2017-11-19 04:50:04

标签: python regex

我有以下输入:

[ [ 'A(x)|B(x,y)|C(z)'],['A(x,y)|B(John,y)|C(z)' ] ]

我想要以下输出

[ [ A(x1)|B(x1,y1)|C(z1)'],['A(x2,y2)|B(John,y2)|C(z2)' ] ] 

如果我有一个列表列表作为输入,如何以这种方式连续将一个初始化的计数器附加到一个?

2 个答案:

答案 0 :(得分:2)

由于它是一个列表列表,您必须使用列表推导,enumerate,正则表达式。

if let json = try? JSONDecoder().decode(Array<String>.self, from: data){

    self.urls = json
}

迭代主列表,然后遍历子列表,然后匹配并替换(附加x或y或z旁边的索引号)子列表中的每个字符串。

答案 1 :(得分:1)

Python代码

我个人使用正则表达式。 re.sub将字符串替换为另一个字符串(包含正则表达式标记,如\g<1>)。

re.sub("(?<!\w)([xyz])",r"\g<1>2",before)

制作完整的代码:

import re

before = "[ [ 'A(x)|B(x,y)|C(z)'],['A(x,y)|B(John,y)|C(z)' ] ]"
print(re.sub("(?<!\w)([xyz])",r"\g<1>2",before))

正则表达式解释

(?<!\w)([xyz])

我们正在做一个消极的看法,以确保它不是单词(?<!\w)的一部分。然后我们检查所需的变量名([xyz])。如果它遵循这种模式,那么我们将其替换为:

\g<1>2

我使用\g<1>代替\1,因为Python不会按我们的意愿解释\12。它会将其视为正则表达式组12,而不是正则表达组1,而不是数字2。

Regex101是理解正则表达式的绝佳工具。单击链接以查看其工作原理。