修改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
相关产品推荐
相关产品推荐

