到目前为止,我试图在Java中开发一个简单的REGEX而没有成功。这是我想要实现的目标。
不接受空字符串。在分隔符数字的左侧或右侧需要至少一组数字。 13.
被接受; <{1>}也被接受。
分隔符可能为.13
或.
。
只允许使用一个或零个字符分隔符。
不允许单独使用不带数字的分隔符。例如,,
不允许单独使用。
我面临的主要问题是如何使分隔符可选。我正在尝试这个:
.
这里我试图在字符串的开头指定一个可选的数字列表。稍后,我指定一个分隔符,可以是private final Pattern pattern = Pattern.compile("^[0-9]*.?|,?[0-9]*$");
或.
,也是可选的。后来,右侧,也是一串数字,也是可选的。这是问题:只有,
或空字符串匹配。
这是我的代码:
.
答案 0 :(得分:3)
其中一个问题是,由于运算符优先级
^[0-9]*.?|,?[0-9]*$
与
基本相同(^[0-9]*.?)|(,?[0-9]*$)
因此digits.digits
不匹配。
[0-9]*
表示零或更多,因此.
只会匹配。
另请注意,在这种情况下实际上并不需要^
和$
,而是在您使用find()
或类似内容时更多。
您想要的更像是:
[0-9]+[.,]?|[0-9]*[.,][0-9]+
[.,]
表示.
或,
[0-9]+
表示一个或更多数字
似乎您熟悉其他语法。
修改强>
另请注意,对于数字,您可能不希望00000
匹配,尽管未在要求中说明。如下所示:
(0|[1-9][0-9]*)[.,]?|(0|[1-9][0-9]*)?[.,][0-9]+
以上内容将匹配0
或任何不以可选分隔符左侧零开头的数字(如果分隔符右侧有任何内容,则不会出现任何内容)。