如何用RegEx和Power Automate Desktop捕获特定字符串到最后一个模式的所有数据?
在Power Automate Desktop中实现正则匹配需求的方案
完全可以实现你的需求,Power Automate Desktop(PAD)支持正则表达式的多行匹配与内容捕获,只需调整正则表达式和动作设置即可解决问题。
你之前正则的问题
你写的正则存在几个错误:
- 错误用反引号转义下划线,正则里下划线无需转义
[A-Za-z]_+_[A-Za-z]+逻辑错误,正确的LAST_FIRST格式匹配应为[A-Za-z]+_[A-Za-z]+- 未设置匹配范围的结束条件,导致PAD无法正确捕获全部目标内容
正确的正则表达式
根据你的需求,分两种场景提供正则:
场景1:匹配所有00_000_A.B.C._One_Room到01_200_A.B.C._Two_Room之前的内容
包含示例中两个00_000_A.B.C._One_Room块及中间的所有LAST_FIRST行:
(?s)00_000_A\.B\.C\._One_Room.*?(?=01_200_A\.B\.C\._Two_Room)
(?s):开启单行模式,让.能匹配换行符,实现跨多行匹配00_000_A\.B\.C\._One_Room:匹配起始字符串,.需转义(正则中.是通配符).*?:非贪婪匹配任意字符(含换行),直到遇到目标终止字符串的前序位置(?=01_200_A\.B\.C\._Two_Room):正向预查,仅匹配到终止字符串之前的内容,不包含终止字符串本身
场景2:仅匹配最后一个00_000_A.B.C._One_Room到01_200_A.B.C._Two_Room之前的内容
如果只需要示例中第二个00_000_A.B.C._One_Room块及对应的LAST_FIRST行:
(?s)00_000_A\.B\.C\._One_Room(?:(?!00_000_A\.B\.C\._One_Room).)*?(?=01_200_A\.B\.C\._Two_Room)
(?:(?!00_000_A\.B\.C\._One_Room).)*?:确保匹配过程中不会包含另一个起始字符串,只捕获最后一个起始块的内容
PAD操作步骤
- 添加提取文本动作,将目标文本(如从文件读取的内容)作为输入源
- 在「正则表达式」字段填入上述对应场景的正则
- 勾选「单行模式」(或直接在正则开头加
(?s)) - 提取到内容后,可通过拆分文本动作按换行拆分每一行,再按下划线拆分LAST_NAME和FIRST_NAME,最后用写入Excel工作表动作完成数据写入
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

