You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:48:02