我想将小数与整数部分匹配,但有或没有小数部分,例如Scala中的1.1
,0.1
,1.
但不是.1
。
目前,我的解决方案是
val pattern: Regex = raw"\d+.\d*".r;
然而,它错误地匹配小数" .2000"。 pattern.findAllIn(".2000").toList(0)
等于2000.问题是什么?
答案 0 :(得分:1)
非转义点与任何chsar匹配,但与换行符匹配。
在最基本的形式中,提取符合9+.9*
格式的数字的正则表达式将如下所示
val pattern: Regex = """\d+\.\d*""".r
请参阅regex demo。在这里,\d+
匹配1位数,\.
匹配单个点,\d*
匹配0位或更多位数。
如果您想避免在192.168
中匹配192.168.0.2
,请添加一些外观,例如
val pattern: Regex = """(?<!\d\.)\d+\.\d*(?!\.?\d)""".r
请参阅regex demo。在此处,(?<!\d\.)
否定反馈不允许数字和点出现在所需格式的数字之前,(?!\.?\d)
否定前瞻禁止.
+数字或仅数字右数在号码之后。