如何在kdb+字符串中解析和替换'['与']'字符?
解决kdb+中带[]的字符串替换问题
方法1:使用rereplace配合正则转义
kdb+的ssr依赖正则匹配,[和]是正则元字符,直接使用会被解析为字符组定义。需要将这两个字符转义,而q字符串中反斜杠需要双写(单反斜杠是字符串自身的转义符),把搜索目标x[0]写成x\\[0\\]即可:
rereplace["tax[0]";"x\\[0\\]";"p"] / 输出结果:"tap"
方法2:封装辅助函数处理批量参数
如果需要替换多种带[]的参数(比如x[0]、y[1]等),可以先写一个自动转义特殊字符的辅助函数,简化批量替换操作:
// 转义正则特殊字符的辅助函数 escapeRegex:{[s] ssr[ssr[s;"[";"\\["];"]";"\\]"]} // 调用示例 target:"tax[0] y[1] z"; replaceMap:("x[0]";"p";"y[1]";"q"); // 循环执行替换 result:target; {result:rereplace[result;escapeRegex[x];y]} each 2 cut replaceMap; result / 输出结果:"tap q z"
方法3:无正则的字符串拆分拼接
如果不想依赖正则解析,可以直接通过子串定位、拆分拼接实现替换,完全规避元字符解析问题:
strReplace:{[s;sub;rep] pos:ss[s;sub]; if[-1=pos; :s]; (pos#s),rep,((count s)-pos-count sub)#s } // 调用示例 strReplace["tax[0]";"x[0]";"p"] / 输出结果:"tap"
内容的提问来源于stack exchange,提问作者Anand Kulkarni
相关产品推荐
相关产品推荐

