在kdb/q中提取匹配指定模式的表行数据(正则匹配问题)
解决kdb/q正则匹配提取符合模式的行
问题分析
你当前的正则表达式无法匹配目标行,核心问题在于日期部分未严格限制格式:原正则[A-Za-z]+-[0-9]+允许任意长度的字母和数字,而需求是固定的XXX-XX格式(3个字母+短横线+2个数字)。
修正后的代码
tableName: ([] description: ("ABC 1.45 Apr-24"; "ABC 1.34 1/2/23"; "DE 2.456 Mar-22";"CBD 4/3/2023 5.78"; "XYZ 3.7 Jun-25"; "PQR 4.12 May-21"; "MNO 7.345 Jul-23")) // 修正后的正则:严格限制日期为3字母-2数字格式 pattern: "^[A-Z]+ [0-9]+\\.[0-9]+ [A-Z]{3}-[0-9]{2}$" result: select description from tableName where description like\: pattern result
输出结果
description ------------ "ABC 1.45 Apr-24" "DE 2.456 Mar-22" "XYZ 3.7 Jun-25" "PQR 4.12 May-21" "MNO 7.345 Jul-23"
正则规则说明
^[A-Z]+:匹配开头任意长度的大写字母名称(若需支持小写,可改为[A-Za-z]+)[0-9]+\\.[0-9]+:匹配中间的十进制数值,要求至少1位整数和1位小数(空格分隔前后内容)[A-Z]{3}-[0-9]{2}$:匹配结尾的XXX-XX格式日期,严格限制为3个大写字母+短横线+2个数字
内容的提问来源于stack exchange,提问作者Dhanuushri
相关产品推荐
相关产品推荐

