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

修改Power Query代码以提取带符号前后缀的目标数字

修改Power Query代码以提取带符号前后的数字

此前用于从PDF导入不同格式表格的Power Query方案运行良好,但近期收到的部分PDF文件中,需提取的数字前后附带无关符号(示例如图所示),现需修改代码实现无视这些符号,精准提取数字内容。

数字前后带符号示例

核心修改思路

原代码的数字提取逻辑仅针对纯数字场景,我们需要替换为正则匹配或字符过滤的方式,保留数字、小数点、负号(如果有负数),剔除所有其他无关符号。

具体修改方案

方案1:字符过滤法(无需启用正则)

找到原代码中提取数字的语句(比如用Text.Select的部分),替换为以下代码(将[目标列名]替换为实际列名):

= Text.Trim(Text.Remove([目标列名], List.RemoveItems(Text.ToList([目标列名]), {"0".."9", ".", "-"})))
  • 逻辑:先把列文本拆分为单个字符,只保留数字、小数点、负号,再去掉首尾空白。

方案2:正则匹配法(更精准)

如果需要更精准的匹配(比如只提取连续的数字段),可以使用正则表达式。替换为以下代码:

= let
    匹配规则 = "\\-?\d+\.?\d*",
    匹配结果 = Text.RegularExpressions.Matches([目标列名], 匹配规则)
  in
    if List.Count(匹配结果) > 0 then 匹配结果{0}[Value] else null
  • 逻辑:用正则匹配可选负号开头、后面跟整数或小数的数字段,提取第一个匹配到的有效数字。

方案3:针对负号的特殊处理

如果仅需处理负号在数字前后的情况,可使用以下简化代码:

= if Text.Contains([目标列名], "-") then 
    "-" & Text.Select(Text.Remove([目标列名], {"-"}), {"0".."9", "."})
  else 
    Text.Select([目标列名], {"0".."9", "."})

注意事项

  • 如果数字包含千分位逗号,可在允许的字符列表中添加",",之后用Text.Replace([结果列], ",", "")去掉逗号即可。
  • 将上述代码批量应用到所有需要提取数字的列,测试不同PDF文件的提取效果。

内容的提问来源于stack exchange,提问作者chi005

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:47:24