如何从长文本提取可选Regex分组,无匹配时填充默认值?
问题描述
刚入职新岗位,此前很少接触正则表达式(Regex),现在需要从PDF转换而来的薪资TXT文本中提取多组数据,用于在UiPath中生成表格。目前在.NET/C#环境下测试,使用的正则表达式如下:
(\w+),\s(\w+.*(\n(?=Emp:))).*\n.*\n.*\n.*((?<=401KER\s)\d*\.\d*)?.*\n.*\n.*\n.*((?<=Gross:\s\d*\.*\d*\s)\d*\,*\d*\.*\d+)
该正则可以捕获所需分组,但对应401KER的分组需设为可选。目前在分组后加?虽能匹配全部3条员工记录,但无401KER的记录会缺失该分组值,希望无匹配时返回0或空值填充表格单元格。
测试用薪资文本
Earn Rate / Current YTD Tax W-4 Current YTD Ded Current YTD Desc Amount Name Amount Hrs Amount Hrs Amount Name Amount Amount Name Amount Amount Jacobs, Glenn Emp: 9 REG 25.00 80.00 2,000.00 469.00 11,725.00 FWT M 0 61.33 393.09 HLTH PT 123.66 550.62 Net 1,465.00 PTOHRLY 11.00 275.00 SSEE 115.09 706.14 HLTH ER 115.38 721.14 Deposited 1,465.00 MEDCEE 26.92 165.15 401K % 120.00 720.00 COWT M 0 59.00 366.00 401KER 80.00 480.00 Voucher No. 137 CODENVEE 17.25 HSA 20.00 60.00 COFAMEE 9.00 54.00 QTD Gross: 12,000.00 Gross: 80.00 2,000.00 480.00 12,000.00 271.34 EE Deds: 263.66 Wight, Paul Q Emp: 11 DAYS 525.00 8.00 4,200.00 12.00 6,300.00 FWT M 0 751.38 1,250.76 Net 2,940.42 SSEE 260.40 390.60 Deposited 2,940.42 MEDCEE 60.90 91.35 COWT M 0 168.00 243.00 Voucher No. 138 CODENVEE 5.75 COFAMEE 18.90 28.35 QTD Gross: 6,300.00 Gross: 8.00 4,200.00 12.00 6,300.00 1,259.58 Johnson, Dwayne A Emp: 6 REG 22.00 80.00 1,760.00 472.00 10,384.00 FWT S 0 105.43 706.72 HLTH PT 139.96 842.10 Net 1,219.16 OT1.5 20.00 660.00 SSEE 100.44 643.41 HLTH ER 115.38 721.14 Deposited 1,219.16 PTOHRLY 8.00 176.00 MEDCEE 23.49 150.48 401K % 105.60 673.20 COWT S 0 58.00 375.00 401KER 70.40 448.80 Voucher No. 139 CODENVEE 17.25 COFAMEE 7.92 50.49 QTD Gross: 11,220.00 Gross: 80.00 1,760.00 500.00 11,220.00 295.28 EE Deds: 245.56
解决方案
调整正则表达式
将原正则中401KER的可选捕获组,修改为包含空匹配分支的结构,确保分组始终存在(无匹配时返回空字符串):
(\w+),\s(\w+.*(\n(?=Emp:))).*\n.*\n.*\n.*((?<=401KER\s)\d*\.\d*|).*\n.*\n.*\n.*((?<=Gross:\s\d*\.*\d*\s)\d*\,*\d*\.*\d+)
若需要无匹配时直接返回0,可将分支改为((?<=401KER\s)\d*\.\d*|0)。
代码层面处理(UiPath/C#)
如果不想修改正则,也可在捕获分组后通过代码判断替换空值:
// 获取401KER分组值,为空则替换为"0" string fourOhOneKerValue = string.IsNullOrEmpty(match.Groups[4].Value) ? "0" : match.Groups[4].Value;
在UiPath中,可通过Assign活动实现上述逻辑,直接将处理后的值填入表格单元格。
内容的提问来源于stack exchange,提问作者BigCountry
相关产品推荐
相关产品推荐

