【发布时间】:2017-04-13 19:24:26
【问题描述】:
我需要将字符串中的每个整数乘以另一个数字,这样
In [1]: mystring = '2 apple trees yield 4 apples'
In [2]: myfunction(mystring, by = 2)
Out[3]:'4 apple trees yield 8 apples'
有了这样的字符串,使用正则表达式重新组装所需的输出还不错,但我希望能够处理这种情况:
In [1]: mystring = '(((((A:1,B:1):1,C:2):2,D:4):2,(((E:1,F:1):1,G:2):2,H:4):2):2,(((I:1,J:1):1,K:2):2,L:4):4):8;'
In [2]: myfunction(mystring, by = 0.5)
Out[3]:'(((((A:0.5,B:0.5):0.5,C:1):1,D:2):1,(((E:0.5,F:0.5):0.5,G:1):1,H:2):1):1,(((I:0.5,J:0.5):0.5,K:1):1,L:2):2):4;'
【问题讨论】:
-
这是作业吗?
-
你的代码在哪里,你有什么问题?
-
以
'(\d)+'分割字符串,收集片段列表。findall()原始字符串中的数字使用相同的 re,将每个片段转换为 int,相乘,再转换回 str(使用列表推导)。现在,压缩两个列表并将结果展平。 -
你有一个实际数据结构的字符串表示。解析它,定义适当的映射函数并将其应用于结果,然后将其重新编码为新字符串。
-
见this demo,你可以在lambda或回调方法中使用更复杂的逻辑。