有人可以帮我做正则表达式吗?基本上,我想要一个与十进制数字匹配的正则表达式。
允许的类型:
12
1.3234
0.3423434
23423.12
不允许的类型:
0012
12.324.12
01.2332
.12
121212.
谢谢您的帮助!
致谢!
答案 0 :(得分:2)
此正则表达式可以完成您的工作。
^(?:[1-9][0-9]*|0)(?:\.[0-9]+)?$
^
-字符串的开头(?:
-一个非捕获组的开始[1-9][0-9]*
-匹配不以零开头的数字|0
-或仅允许匹配零以允许0.3423434
或0.1
之类的数字(?:\.[0-9]+)?
-(可选)允许数字中的小数部分$
-字符串结尾 编辑:基于Allan的建议,使用\d
代替[0-9]
如果您的输入仅包含英文数字,或者您仅打算匹配英文数字,则出于更好的性能和在正则表达式引擎中广泛支持之类的原因,应首选使用[0-9]
。
但是,如果您的输入包含其他语言(例如印地语१
२
等)的数字,并且您希望匹配任何数字,则应首选\d
而不是{{1} }
答案 1 :(得分:0)
那是
^[[:digit:]]+(\.[[:digit:]]+)?$
字符串的开头,然后是一个或多个数字,然后是(可选)一个点和一个或多个数字,然后是字符串的结尾。
如果要迎合标志,请在[+-]?
之后添加^
。
答案 2 :(得分:0)
您可以使用alternation
^(?:0\.\d*[1-9]\d*|[1-9]\d*(?:\.\d+)?)$
说明
^
字符串的开头(?:
非捕获组
0\.
匹配单个零,后跟一个点\d*[1-9]\d*
匹配0+个数字,匹配1-9个数字,再匹配0+个数字t仅阻止零匹配|
或[1-9]\d*
匹配一个1-9的数字,然后匹配0+个数字(?:\.\d+)?)
可选部分,用于匹配点和1个以上的数字)
关闭非捕获组