如何调整正则表达式以提取Total Hours行的最后一个小数数字?
问题:从PDF工时表中提取Total Hours行的最后一个小数数字
我尝试用正则表达式从PDF工时表中解析薪资周期内的总工时(Total Hours)。示例内容如下:
Total Overtime Hours:
Total Hours: 2.2 1.0 1.0 3.5 5.0 12.7
Signature:
现有正则表达式:(?<=Total Hours:*(?:.*?( )+){6}).*
这个表达式仅适用于每周工作5天的员工,若员工工作天数多于或少于5天(如下例)则会失效:
Total Overtime Hours:
Total Hours: 2.2 1.0 1.0 3.5 5.0 6.3 19.0
Signature:
请问如何调整正则表达式,以始终提取以"Total Hours:"开头行的最后一个小数数字?
解决方案
方案1:正向预查定位匹配
使用以下正则表达式:(?<=Total Hours:.*)\d+\.\d+
- 逻辑:
(?<=Total Hours:.*)作为正向预查,确保目标小数位于"Total Hours:"所在行的内容之后;\d+\.\d+匹配标准小数格式,借助正则的贪婪特性,自动匹配该行最后一个符合要求的小数。
方案2:捕获组提取末尾数字
如果你的正则环境支持捕获组,可使用:Total Hours:.*?(\d+\.\d+)$
- 逻辑:
Total Hours:.*?匹配从行首到最后一个小数前的所有内容,(\d+\.\d+)$捕获行尾的小数数字,直接提取捕获组1的结果即可。
方案3:高效精准匹配
针对行内数字以空格分隔的特点,可简化为:(?<=Total Hours:.* )\d+\.\d+
- 逻辑:用
.*匹配到该行最后一个空格,再匹配后续的小数,减少正则回溯,提升匹配效率。
内容的提问来源于stack exchange,提问作者Koprowski
相关产品推荐
相关产品推荐

