Excel Power Query无正则支持 如何提取字符串中的8位连续数字
Power Query提取字符串8位连续数字的解决方案
需求说明
Power Query原生不支持正则表达式,需实现从字符串任意位置提取首次出现的8位连续数字,无匹配时返回null,匹配规则示例如下:
- abc123456 --> null
- abc12345678 --> 12345678
- abc 12345678 --> 12345678
- abc 12345678aaaa --> 12345678
- abc 1111 ddd12345678aaaa 3467 --> 12345678
- abc 1111 ddd123456aaaa 3467 --> null
初始代码报错问题
此前尝试手动编写M语言逻辑、使用「从示例列」功能均无法得到稳定结果,也未找到适配PowerQuery/M的可用方案。
参考Alexis Olson的方案编写代码,仅将原代码中的#"Previous Step"替换为自有数据源步骤名Sheet1_Sheet,代码如下:
= Table.AddColumn( Sheet1_Sheet, "PatternMatched", (r) => List.First( List.Select( List.Transform( {0..Text.Length(r[String]) - 8}, each Text.Range(r[String], _, 8) ), each _ = Text.Select(_, {"0".."9"}) ) ) )
运行时报错:"Expression.Error: The field 'String' of the record wasn't found. Details: Column1=abc123456"。
修正后可运行代码
排查出两处需修改的配置项,修正后代码可正常运行:
Table.AddColumn( #"Renamed Columns", "PatternMatched", (r) => List.First( List.Select( List.Transform( {0..Text.Length(r[Column]) - 8}, each Text.Range(r[Column], _, 8) ), each _ = Text.Select(_, {"0".."9"}) ) ) )
修正点说明:
- 将
#"Previous Step"替换为Power Query「查询设置」面板中「应用步骤」列表里的上一步骤名称,示例中为#"Renamed Columns" - 将
r[String]替换为存储待处理字符串的实际列名,示例中为r[Column]
内容的提问来源于stack exchange,提问作者pio pio
相关产品推荐
相关产品推荐

