RegEx -在线搜索单词并输出最后一位小数

yhqotfr8  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(69)

我尝试使用RegEx从PDF时间表中解析支付期内的总工作小时数。
举例来说:
加班总小时数:总时数:2.2 1.0 1.0 3.5 5.0 12.7签名:

(?<=Total Hours:*(?:.*?( )+){6}).*

字符串
总小时数将始终是以“总小时数:”开头的行上的最后一个数字
上面的RegEx代码适用于大多数每周工作5天的员工,但如果他们的工作时间超过或少于5天,则会中断,如下面的示例所示:
加班总小时数:总时数:2.2 1.0 1.0 3.5 5.0 6.3 19.0签名:
regexr.com/7hci1
有什么想法可以调整,总是抓住最后一个十进制数的行开始与“总小时数:”?
谢谢你,谢谢

t9aqgxwy

t9aqgxwy1#

您可以使用的.NET兼容正则表达式是

(?m)(?<=Total Hours:.*?)\d*\.?\d+(?=\r?$)

字符串
参见regex demo。关键是在模式的开始使用内联修饰符(?m)来设置多行模式(它将使$正好在换行符(\n)字符或字符串结尾之前匹配)。由于$只匹配换行符字符或字符串结尾之前,因此必须允许回车字符\r,因此需要(?=\r?$)正向前查找,而不是$锚,它匹配\r\n\n或字符串结尾之前。
要匹配Total Hours:和最后一个十进制/整数(无符号)之间的任何文本,您需要使用.*?模式,而不是其贪婪的对应物.*,因为它会“吃掉”与\d*\.?部分匹配的任何可选字符。

  • 更多详情 *:
  • (?m)-一个内联修饰符,使$匹配换行符、LF、char之前的位置
  • (?<=Total Hours:.*?)-一个正向后查找,它匹配紧接在Total Hours:前面的位置,以及除换行字符以外的任何零个或多个字符,尽可能少
  • \d*-零位或多位
  • \.?-可选的.字符
  • \d+-一个或多个数字
  • (?=\r?$)-一个积极的前瞻,匹配一个位置,紧跟着一个可选的回车字符,然后是一个换行符字符或字符串结束。

相关问题