正则表达式 - 匹配最后一个数字而不是最后一个数字

时间:2018-03-14 07:47:08

标签: regex

使用正则表达式 - 替换,我正在尝试格式化这样的数字:

前导号码应以+分隔。此外,最后一个数字也应该用+分隔。更棘手的部分是,应该删除+到中间部分的相邻1,而不触及第一个和最后一个数字,例如,

011023040 - > 0 + 02304 + 0

111023920443 - > 1 + 02392044 + 3

13242311 - > 1 + 32423 + 1

我几乎通过以下正则表达式来实现这一目标:

 '^([0-9]{1})([1]+)?([0-9*)(0-9]{1}$'

并将其替换为

'\1+\3+\4'

但是,我对最后一个示例有疑问,因为它返回:

 1+324231+1

但是,应删除第二个+之前的那个。

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

你必须使用非贪婪的量词:

^([0-9])1*([0-9]*?)1*([0-9])$
                ^^

Live demo

答案 1 :(得分:0)

我设法按以下方式对数字进行分组

^(\d)(1*)(\d+)(\d)$

使用多行和全局标记。

替换应该看起来像\1+\3+\4