如何在Power Automate中从TXT文件提取Service后货币前的数字?
解决Power Automate中提取指定文本的问题
问题分析
你需要从文本中提取Service : 之后、货币(如GBP)之前的数字内容,示例文本为:
Line 3, 4000657 Service : <b>96 140</b> <b>GBP</b>
原公式出错的核心原因有两个:
- 匹配关键词不匹配:你用了
'Service: '(冒号前无空格),但目标文本里是Service :(冒号前带空格),导致indexOf无法定位到正确起始点,后续计算全部失效。 - 结束位置定位错误:你用空格作为结束标记,但目标数字本身包含空格(如
96 140),这会导致截取到一半就终止,无法获取完整内容。
解决方案
方法1:修正substring公式
调整匹配关键词,同时用固定的HTML标签作为结束标记,确保截取范围准确:
substring( string(outputs('Compose_1_extraire_contenu_du_fichier')), add(indexOf(string(outputs('Compose_1_extraire_contenu_du_fichier')), 'Service : <b>'), 13), sub( indexOf(string(outputs('Compose_1_extraire_contenu_du_fichier')), '</b> <b>'), add(indexOf(string(outputs('Compose_1_extraire_contenu_du_fichier')), 'Service : <b>'), 13) ) )
'Service : <b>'的长度为13,add(...,13)直接跳转到数字的起始位置。- 用
'</b> <b>'作为结束标记,确保截取到完整的数字内容。
方法2:使用正则表达式(更适配可变格式)
Power Automate的matches函数支持正则匹配,能更灵活处理格式变化:
first(matches(outputs('Compose_1_extraire_contenu_du_fichier'), 'Service : <b>(.*?)</b> <b>[A-Z]+</b>'))['groups'][0]['value']
- 正则表达式
Service : <b>(.*?)</b> <b>[A-Z]+</b>会精准匹配Service : <b>和货币标签之间的内容,非贪婪模式.*?确保只取目标数字。 first(...)['groups'][0]['value']提取匹配到的第一组核心内容。
内容的提问来源于stack exchange,提问作者A.B
相关产品推荐
相关产品推荐

