现在我有正则表达式:
([1-9]{0,9}m - [0-9]{0,9}m)
匹配1m - 5m
,7m - 17m
等短语
有时字符串可能是1.5m - 5m
。
我怎样才能匹配这些字符串呢?
答案 0 :(得分:2)
您可以使用(?:\.\d+)?
添加可选的小数部分:
([1-9]{0,9}(?:\.\d+)?m\h*-\h*\d{0,9}(?:\.\d+)?m)
请参阅regex demo
如果第一个号码可以是任意号码,请将[1-9]
替换为\d
。
(?:\.\d+)?
表示匹配一个文字点后跟一个或多个数字1或0(?
)次。
\h*
匹配零个或多个水平空格。
详细说明:
[1-9]{0,9}
- 从1
到9
范围内的0到9位数字(替换为\d
以匹配任何数字)(?:\.\d+)?
- 可选的小数部分m
- 文字m
\h*
- 零个或多个水平空格-
- 字面连字符\h*
- 零个或多个水平空格\d{0,9}
- 任意数字,0到9次出现(?:\.\d+)?m
- 见上文。如果您打算阻止在数字中匹配前导零,但接受101m - 5m
之类的字符串,则可能需要使用
((?!0)\d{0,9}(?:\.\d+)?m\h*-\h*\d{0,9}(?:\.\d+)?m)
^^^^^
见another regex demo。前瞻只会将通用\d
限制为不以0
开头。
答案 1 :(得分:2)
你可以试试这个。
n
\d+(\.\d+){0,1}m\s-\s\d+(\.\d+){0,1}m
之后必须有数字。所以一起考虑。但它必须是一次或ZERO.so ...