匹配两个数字的正则表达式

Regular expression to match two numbers

提问人:haael 提问时间:9/7/2023 最后编辑:Wiktor Stribiżewhaael 更新时间:9/8/2023 访问量:43

问:

我需要一个匹配 2 个浮点数的正则表达式,这些浮点数可以用空格、逗号或什么都没有分隔。

浮点数可以是整数(由数字组成)、分数(数字、小数点、数字)或跳过前导零的余数(小数点、数字)。它也可以以可选的加号或减号开头。浮点数不包含空格。

有效浮点数示例:、、、、、345678976.4567.765456+8765456-876.345-.8765345

现在我想匹配两个数字,它们可以用任意数量的空格、逗号(带有可选空格)或任何 .i.e. 连接在一起,但前提是第二个浮点数不以数字开头。

用空格分隔的两个数字:8765 2345.34567

用逗号分隔的两个数字:3456.8765,567.234

两个数字用逗号和空格分隔:567865.667 , +87567.234323

两个数字连接在一起,但仍应分开匹配的示例:

5673+8667.45 -> 5673,+8667.45

-0977.345.3456 -> -0977.345,.3456

780-875 -> 780,-875

+098+.45 -> +098,+.45

为了让事情变得更难,必须对浮点子表达式进行分组,因为我想解析它们。因此,负号或正号必须包含在组中。

我当前的解决方案错误地匹配了一个数字,将最后一个数字视为第二个数字。

85678.96783-> errorneusly 匹配为: ,85678.96783

此类字符串不得与表达式匹配。

正则表达式 浮点

评论

0赞 The fourth bird 9/7/2023
您可以搜索与浮点数匹配的正则表达式,然后匹配可选空格和逗号 regex101.com/r/K0fgA2/1
3赞 Wiktor Stribiżew 9/7/2023
您的“当前解决方案”是什么?
0赞 chtz 9/7/2023
@Thefourthbird OP 不希望被匹配为0.00., 0
0赞 The fourth bird 9/7/2023
@chtz 是的,有很多方法可以匹配这些值。

答:

1赞 chtz 9/8/2023 #1

您可以用于原子(非回溯)非捕获组,例如(?>...)

([+-]?(?>[0-9]+(?:[.][0-9]*)?|[.][0-9]+))\s*,?\s*([+-]?(?>[0-9]+(?:[.][0-9]*)?|[.][0-9]+))

浮点匹配器取自此处:https://stackoverflow.com/a/12643073。我使内部组成为非捕获组,使数字部分原子化。[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)(?:...)

测试代码:https://regex101.com/r/ZWNLBU/1(源自 @Thefourthbird 的链接)