我需要构建一个正则表达式来匹配小数点右侧的尾随零。使用这个正则表达式/,0+$/,我可以匹配逗号右边的所有零,包括逗号,例如,123,000和123,00,但是十进制数123,450中的零不匹配。如果我使用这个正则表达式/0+$/,我可以匹配123,450中的零,但它也匹配这个数字120中的零。如何匹配仅在逗号后的尾随零?
/,0+$/
123,000
123,00
123,450
/0+$/
120
t1qtbnec1#
你可以使用以下正则表达式进行匹配:
(?:(,[0-9]*[1-9])|,)0+$
字符串并替换为:
$1
型RegEx Demo
RegEx详情:
(?:
(,[0-9]*[1-9])
1-9
|
,
)
0+
$
dldeef672#
如果支持后向Assert中的无限量词,则可以匹配逗号,或者Assert当前位置的左侧是一个逗号,后跟1个或多个数字。然后将1个或多个零匹配到字符串的末尾,并替换为空字符串。
(?:,|(?<=,\d+))0+$
字符串
说明
(?<=,\d+)
请参见regex demo。
4szc88ey3#
要仅匹配逗号后的尾随零,可以按如下方式修改正则表达式:
/,\d*0+$/
字符串说明:,\d*:匹配一个逗号后跟零个或多个数字。0+$:匹配字符串末尾的一个或多个零。通过在逗号后包含\d*,可以确保尾随零之前可以有任意位数。此模式将匹配逗号后面的尾随零,同时排除像120这样的数字,其中零前面没有逗号。下面是一些正则表达式如何工作的示例:
,\d*:
0+$:
\d*
希望这对你有帮助!如果你还有什么问题就告诉我。
hs1rzwqc4#
我假设你实际上是指 * 尾随 * 零,而不是一个奇异的零。下面推断值 * 是 * 十进制值。所以,我猜这里的违规是它会额外匹配 120 中的 0。
(?<!,)0+$
字符串负向后查找将Assert初始重复 0 之前的值不是逗号。因此,它将在逗号后保留单数 0。比如说,
123,000 123,00 123,450
型如果移除匹配项,将变为以下内容。
123,0 123,0 123,45
型如果你想删除一个单数的 0,你可以附加模式。
(?<!,)0+$|,0+
123 123 123,45
的字符串
4条答案
按热度按时间t1qtbnec1#
你可以使用以下正则表达式进行匹配:
字符串
并替换为:
型
RegEx Demo
RegEx详情:
(?:
:启动非捕获组(,[0-9]*[1-9])
:匹配一个逗号,后跟0+个数字和一个数字1-9
。在组#1中捕获此值(用于替换反向引用$1
)|
:或,
:匹配逗号)
:结束非捕获组0+
:匹配1+个零$
:结束dldeef672#
如果支持后向Assert中的无限量词,则可以匹配逗号,或者Assert当前位置的左侧是一个逗号,后跟1个或多个数字。
然后将1个或多个零匹配到字符串的末尾,并替换为空字符串。
字符串
说明
(?:
备选方案的非捕获组,
按字面匹配|
或(?<=,\d+)
正向后看,置位,
和左侧的1+位)
关闭非捕获组0+
匹配1+乘以零$
字符串结束请参见regex demo。
4szc88ey3#
要仅匹配逗号后的尾随零,可以按如下方式修改正则表达式:
字符串
说明:
,\d*:
匹配一个逗号后跟零个或多个数字。0+$:
匹配字符串末尾的一个或多个零。通过在逗号后包含\d*
,可以确保尾随零之前可以有任意位数。此模式将匹配逗号后面的尾随零,同时排除像120这样的数字,其中零前面没有逗号。下面是一些正则表达式如何工作的示例:
希望这对你有帮助!如果你还有什么问题就告诉我。
hs1rzwqc4#
我假设你实际上是指 * 尾随 * 零,而不是一个奇异的零。
下面推断值 * 是 * 十进制值。
所以,我猜这里的违规是它会额外匹配 120 中的 0。
字符串
负向后查找将Assert初始重复 0 之前的值不是逗号。
因此,它将在逗号后保留单数 0。
比如说,
型
如果移除匹配项,将变为以下内容。
型
如果你想删除一个单数的 0,你可以附加模式。
的字符串