regex 最后一次出现0后捕获1-9

anauzrmj  于 2022-12-24  发布在  其他
关注(0)|答案(3)|浏览(174)

我想捕获最后一次出现零之后1到9之间的所有数字,除了最后一位数字中的零。我尝试了这个模式,它似乎不起作用。
第一个月
数据

0100179835
3000766774
1500396843
1500028408
1508408637
3105230262
3005228061
3105228407
3105228940
0900000000
2100000000
0800000000
1000000001
2200000001
0800000001
1300000001
1000000002
2200000002
0800000002
1300000002
1000000003
2200000003
0800000003
1300000003
1000000004
2200000004
0800000004
1300000004
1000000005
2200000005
0800000005
1300000005
1000000006
2300000006
0800000006
0900000006
1000000007
2300000007
0900000007
0800000007
1000000008
2300000008
0900000008
0800000008
1100000009
2300000009
0900000009
0800000009
1000005217
2000000429
1100000020
1000005000
3000000070
2000000400
1000020000
3000200000
2906000000

预期结果

179835
766774
396843
28408
8408637
5230262
5228061
5228407
5228940
0
0
0
1
1
1
1
2
2
2
2
3
3
3
3
4
4
4
4
5
5
5
5
6
6
6
6
7
7
7
7
8
8
8
8
9
9
9
9
5217
429
20
5000
70
400
20000
200000
6000000
v7pvogib

v7pvogib1#

您可以锚定字符串的结尾,并将非零数字与可选的尾随零匹配。请确保至少有一个匹配数字具有正的前瞻模式:

(?=\d)[1-9]*0?$

演示:https://regex101.com/r/uggV37/2

yuvru6vn

yuvru6vn2#

要获得所需结果:

(?:^0*[1-9]+0*\K0|0\K[1-9]+(?:0[1-9]*|0+)?)$
    • 说明**
  • (?:备选项的非捕获组
  • ^字符串开始
  • 0*[1-9]+0*在可选零之间匹配1+数字1 - 9
  • \K0忽略目前匹配的内容,然后匹配零
  • |
  • 0\K匹配零并忽略到目前为止匹配的内容
  • [1-9]+匹配1+数字1 - 9
  • (?:备选项的非捕获组
  • 0[1-9]*匹配零和可选数字1 - 9
  • |
  • 0+匹配1+零
  • )?关闭非捕获组
  • )关闭非捕获组
  • $字符串结束

参见regex demo

p1tboqfb

p1tboqfb3#

每行匹配1项:

'0123056'.match(/(?<=0)[1-9]*0?$/g).filter(m => m != '')

每行匹配多个项目:

'0123056 0000210 1205000 1204566 0123456 0012340 0123400'.match(/(?<=0)[1-9]*0?\b/g).filter(m => m != '')

相关问题