[NAME] [M?][LAST]
[工资总额][PIT工资][PIT扣缴]
我想要一个正则表达式来检测重复的数字组,以便它解析为:
我目前正在从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的演示