正则表达式,如何找到一组重复的随机数?



我目前正在从pdf中解析数据,我想以简单的格式获得名称和金额:[name] [amount]

NAME LAST
7 494 25 7 494 25 199 44
NAME LAST
4 488 00 4 488 00 109 07
NAME MIDDLE LAST
7 854 00 7 854 00 298 25
NAME LAST
494 23 494 23 12 01
NAME MIDDLE LAST
4 301 56 4 301 56 112 61
NAME M LAST
13 359 25 13 359 25 130 54

[NAME] [M?][LAST]
[工资总额][PIT工资][PIT扣缴]
NAME LAST $7,494.25 $7,494.25 $199.44
NAME LAST $4,488.00 $4,488.00 $109.07
NAME MIDDLE LAST $7,854.00 $7,854.00 $298.25
NAME LAST $494.23 $494.23 $12.01
NAME MIDDLE LAST $4,301.56 $4,301.56 $112.61
NAME M LAST $13,359.25 $13,359.25 $130.54

我想要一个正则表达式来检测重复的数字组,以便它解析为:
NAME LAST $7,494.25
NAME LAST $4,488.00
NAME MIDDLE LAST $7,854.00
NAME LAST $494.23
NAME MIDDLE LAST $4,301.56
NAME M LAST $13,359.25


希望这是有意义的。由于

假设你的组织中没有人的收入超过100万美元或低于1美元,这个正则表达式将做你想要的:

*([a-z][a-z ]+)R+((d+)(?: (d+))? (d+)) (?=2).*

查找

  • 若干空格
  • 名称(简单地)与[a-z][a-z ]+(在组1中捕获)
  • 换行字符(R+)
  • 以空格((d+)(?: (d+))? (d+))分隔的2或3组数字(在第2组中捕获整体数字,在第3、4和5组中捕获单个数字组)
  • 一个空格,后面跟着断言组2是重复的(?=2)
  • 字符将字符串的其余部分匹配到行尾(可能不需要,取决于您的应用程序)(.*)

可以用

代替
$1 $$3$4.$5

获取示例数据的以下输出:

NAME LAST $7494.25
NAME LAST $4488.00
NAME MIDDLE LAST $7854.00
NAME LAST $494.23
NAME MIDDLE LAST $4301.56
NAME M LAST $13359.25

regex101的演示

如果你使用的是JavaScript,你需要做一些小的改变。在正则表达式中,将R替换为[rn],因为JavaScript不识别R。在替换中,将$替换为$$

关于正则表达式101的演示

如果您的正则表达式支持条件替换,您可以通过检查第4组是否属于匹配的一部分,在千位和百位之间添加,:

$1 $$3${4:+,}$4.$5

在本例中,输出为:

NAME LAST $7,494.25
NAME LAST $4,488.00
NAME MIDDLE LAST $7,854.00
NAME LAST $494.23
NAME MIDDLE LAST $4,301.56
NAME M LAST $13,359.25

regex101的演示

最新更新