正则表达式似乎无法捕获小数点

时间:2018-03-08 14:55:27

标签: regex

我想捕捉字符后面的真实数字" FM" 我在大多数情况下都使用正则表达式,除非字符FM后面有一个小数点,例如FM.3它只捕获数字3而不是小数点。

这是我的正则表达式

FM\W?(\.{0,1}\d?\.?\d?)?

这是要测试的字符串

MC1 FM1.2 MC2,
 FM.3,
FM 3,
FM.3,
FM 2 MC1,
FM 0.2 P1 MC1,
FM .3 ,

这是一个演示https://regex101.com/r/ZBVpuS/2 在此链接中查看问题要容易得多

2 个答案:

答案 0 :(得分:1)

你不需要\W吞下点(非单词字符):

FM\s*(\.?\d?\.?\d?)?

捕获组外的\s*将在FM之后删除任何空格。

答案 1 :(得分:1)

See regex in use here

FM\s*(\.\d+|\d+(?:\.\d+)?)
  • FM按字面意思匹配
  • \s*匹配任意数量的空白字符
  • (\.\d+|\d+(?:\.\d+)?)将以下任一选项捕获到捕获组1中
    • \.\d+匹配.后跟一个或多个数字
    • \d+(?:\.\d+)?匹配一个或多个数字,可选地后跟一个点和一个或多个数字。如果您想允许匹配1.这样的数字,而小数点后面没有数字,您可以将\.\d+更改为\.\d*