如何在Power Automate中拆分字符串提取末尾数字
Power Automate 提取文件名末尾整数实现方案
适用场景
适配你提到的文件名规则:前缀为多段短横线分隔的字符,目标整数为最后一段短横线后的开头连续数字,支持后续带任意额外字符、空格的非标准文件名。
实现方法(推荐正则匹配,步骤最少)
Power Automate 云流已原生支持正则match函数,直接调用即可完成提取,全程无需额外控件:
- 第一步:提取不带后缀的纯文件名
使用表达式:substring(triggerOutputs()?['headers/x-ms-file-name'], 0, lastIndexOf(triggerOutputs()?['headers/x-ms-file-name'], '.'))
如果你是从其他控件获取文件名,把triggerOutputs()?['headers/x-ms-file-name']替换成你的文件名变量即可。 - 第二步:匹配目标整数字符串
使用表达式:first(match(【第一步得到的纯文件名】, '\d+(?=[^\d]*$)').groups)
正则\d+(?=[^\d]*$)的作用是匹配整个字符串末尾的最后一段连续数字,自动忽略数字后的所有非数字字符,适配你提到的所有异常文件名场景。 - 可选:如果需要去掉前导零转成纯整数,给上述表达式套一层
int()即可:int(first(match(【第一步得到的纯文件名】, '\d+(?=[^\d]*$)').groups))
兼容低版本无match函数的实现方法
如果你的环境不支持match函数,用字符串拆分+遍历方法实现:
- 初始化三个变量:
纯文件名:字符串类型,赋值为第一步去掉后缀的文件名目标数字:字符串类型,默认值为空继续拼接:布尔类型,默认值为true
- 按短横线拆分
纯文件名,取最后一段,表达式:last(split(variables('纯文件名'), '-')) - 用「Apply to each」遍历上述最后一段的每个字符,拆分字符用
chunk(【最后一段字符串】, 1) - 循环内添加条件判断:
- 条件:
variables('继续拼接') 等于 true且isInt(item()) 等于 true - 满足条件:将
目标数字赋值为concat(variables('目标数字'), item()) - 不满足条件:将
继续拼接赋值为false
- 条件:
- 循环结束后,
目标数字变量就是你要提取的整数字符串。
测试验证
对以下三种文件名测试均能正确提取0303:
- 标准文件名:
BC1234-XX-YY-A-W-0303.pdf - 带后缀字符文件名:
BC1234-XX-YY-A-W-0303testfile.pdf - 带空格文件名:
BC1234-XX-YY-A-W-0303 testfile.pdf
内容的提问来源于stack exchange,提问作者user16068355
相关产品推荐
相关产品推荐

