Julia v1.8中实现字符串内数字替换为两倍值并删除'num'前缀的方法求助
Julia v1.8中实现字符串内数字替换为两倍值并删除'num'前缀的方法求助
我完全懂你现在的困扰——想在Julia 1.8里把字符串中num前缀后面的数字替换成它的两倍,同时删掉num,但之前试的几种写法都没成功对吧?
你之前的写法问题在于:直接用2*s"\1"或者在替换右侧直接做parse操作是行不通的,因为SubstitutionString没法直接和数值运算结合,而且这些表达式会在替换操作执行前就被计算,没法动态对应每个匹配到的数字。
正确的做法是用函数作为replace的第二个参数,让它动态处理每个匹配结果,具体代码如下:
replace("hello num12 text and num5 numbers", r"num([0-9]+)" => m -> string(2 * parse(Int, m[1])))
这段代码的工作逻辑是:
- 正则表达式
r"num([0-9]+)"匹配所有以num开头、后面跟着一串数字的内容,其中括号里的([0-9]+)会捕获数字部分作为第一个匹配组 - 匿名函数
m -> string(2 * parse(Int, m[1]))接收每个匹配对象m,取出捕获到的数字组m[1],把它转成整数后乘2,再转回字符串作为替换内容 - 这样就自动删掉了
num前缀,同时把数字替换成了它的两倍值
运行这段代码后,你就能得到预期的输出:
"hello 24 text and 10 numbers"
如果还有类似的动态替换需求,都可以用这种「正则匹配+函数处理」的方式,非常灵活~
备注:内容来源于stack exchange,提问作者Accumulator
相关产品推荐
相关产品推荐

