我想捕捉字符后面的真实数字" 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 在此链接中查看问题要容易得多
答案 0 :(得分:1)
你不需要\W
吞下点(非单词字符):
FM\s*(\.?\d?\.?\d?)?
捕获组外的\s*
将在FM之后删除任何空格。
答案 1 :(得分:1)
FM\s*(\.\d+|\d+(?:\.\d+)?)
FM
按字面意思匹配\s*
匹配任意数量的空白字符(\.\d+|\d+(?:\.\d+)?)
将以下任一选项捕获到捕获组1中
\.\d+
匹配.
后跟一个或多个数字\d+(?:\.\d+)?
匹配一个或多个数字,可选地后跟一个点和一个或多个数字。如果您想允许匹配1.
这样的数字,而小数点后面没有数字,您可以将\.\d+
更改为\.\d*