2016-11-16 64 views
-1

我正在学习正则表达式。我的要求很简单。这是我的正则表达式。正则表达式 - 捕获组返回null为非匹配字符串

([0-9]*)(\.)([0-9]*) 

我的意见是这样的。

1.9 
2.8 
4.76 
3 
7.8 

我只想返回小数部分。我目前正在打印第三个捕获组$ 3。输出是这样的。

9 
8 
76 
3 
8 

但我的预期输出是这样的。

9 
8 
76 

8 

请告诉我如何做到这一点。每当字符串不匹配我的$ 3返回整个字符串。我希望它返回null或任何其他默认值(如'0')。是否可以使用lookarounds来实现这一点?如果是这样,怎么样?

+3

不,输出肯定不同。请参阅[本演示](https://regex101.com/r/23teqX/1)。请分享代码,如果第3组为空,我认为您会打印输入内容。 –

+0

请用$ 3代替。你会得到我的输出 – user2806971

+0

为什么“替代”?你想要*匹配*,而不是*替代“** **这个**后面的工具/语言/代码是什么? –

回答

0

我能够使用以下正则表达式实现此目的。

正则表达式:(\d*)(\.)(\d+)|(^\d+$)()()

演示:Regex101 Demo

这是考虑到只有两种情况。

  1. 具有小数部分的数字匹配并返回在组$3中捕获。

  2. 没有小数部分的数字,所以在组$3中捕获零宽度。

注:如果有更多的测试案例,请在指定的问题。由于声誉低下,我无法对此进行评论。