我有以下输入:
[ [ '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)' ] ]
如果我有一个列表列表作为输入,如何以这种方式连续将一个初始化的计数器附加到一个?
答案 0 :(得分:2)
由于它是一个列表列表,您必须使用列表推导,enumerate,正则表达式。
if let json = try? JSONDecoder().decode(Array<String>.self, from: data){
self.urls = json
}
迭代主列表,然后遍历子列表,然后匹配并替换(附加x或y或z旁边的索引号)子列表中的每个字符串。
答案 1 :(得分:1)
我个人使用正则表达式。 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是理解正则表达式的绝佳工具。单击链接以查看其工作原理。