您好我正在研究RegEx。正确的响应不应该允许数字到十分之一,如在RESPONSE =“925.0”中,也不应该允许在百分之一之后的尾随零,如RESPONSE =“925.000”。只有正确答复:925,0925,0925。,925。,925.00,00925
我努力了,终于想出了这个
"^-?(0)*(\d*(\.(00))?\d+.|(\d){1,3}(,(\d){3})*(\.(00))?)$"
它适用于三位数字,但如果我想要它为38400.00它不允许它
答案 0 :(得分:1)
尝试使用:
^-?\d{1,3}(?:,?\d{3})*(?:\.(?:00)?)?$
答案 1 :(得分:1)
我不确定小数位是否可以是任何数字或是否必须为零。如果是前者,那么这应该可以解决问题:
^-?\d{1,3}(,?\d{3})*(\.(\d{2})?)?$
如果是后者,那么:
^-?\d{1,3}(,?\d{3})*(\.(00)?)?$
从小数点开始的整个匹配是可选的,并且该匹配中的两个小数位也是可选的。
更新我刚刚意识到你似乎也需要在回复中接受逗号 - 我假设有数千,数百万等等。
根据OP的评论更新#2
^-?(\d+|\d{1,3}(,\d{3})*)(\.(00)?)?$
更新#3 已添加link to regex101以解释此正则表达式。
答案 2 :(得分:0)
我认为您的问题是,您尝试将其匹配为三个块,逗号分隔,但38400.00
没有逗号。
试试这个:
^-?\d+(\.?(\d{2})?)$
-
表示角色, - 。在?
之后,它表示它可能适用也可能不适用。这允许使用负数,因此如果您只想匹配正数,请删除前两个字符。
\d
代表每个数字。只有至少有一个+
后,\.
表示可以有多少个。
然后是?
,这只是数字中的一个点。 ()
与之前的相同。由于您似乎允许尾随句点,我认为您希望将其与以下数字分开考虑。
\.
包含下一个组,即句点(\d
)后跟两个与?
匹配的字符 - 两位数 - 并且可以重复0或1时间,由^
决定。这允许人们在一两个时期之后没有数字,但没有别的。
开头的$
指定它必须位于该行的开头,而末尾的m
指定它必须在该行的结尾处结束。请记住启用多行({{1}})标记,以使其正常工作。
免责声明:我之前没有做过多次正则表达式的工作,所以我完全可以完全离开。如果它不起作用,请告诉我。
答案 3 :(得分:0)
如果没有?'
,你不能这样做^[0-9,]+(\.){0,1}(\d{2}){0,1}$
improved: ^\d+[0-9,]*(\.){0,1}(\d{2}){0,1}$
修改强> 按要求细分了一点
旧的:
[0-9,]+
一个或多个数字/逗号(已接受','为真)所以改进版本:
\d+
用于1位或更多位数的开头
[0-9,]*
0位或以上数字/逗号
接着是
(\.){0,1}
0或1十进制
其次是
(\d{2}){0,1}
0或1(正好2位数)