regex 匹配带或不带前导零的小数的正则表达式

gdx19jrr  于 2023-10-22  发布在  其他
关注(0)|答案(6)|浏览(142)
^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]+\.[0-9]*[1-9][0-9]*)$

我不太懂正则表达式。上面的正则表达式不允许输入.2。但它允许所有其他小数,如0.2,0.02等。我需要让这个表达式允许.2,.06等数字。

iq0todco

iq0todco1#

只需将[0]后面的+更改为ansterisk `*":

^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]*\.[0-9]*[1-9][0-9]*)$

因此,在点之前不允许一个或多个零,只允许0或更多。

k3fezbri

k3fezbri2#

我喜欢这个用于浮点数的正则表达式,它非常聪明,因为它不会将0.0作为一个数字进行匹配。它要求在句号的两边至少有一个非零的数字。当然,我会把它分成几个部分,以便更深入地了解它。

^             #Match at start of string
 (            #start capture group
  [0-9]*       # 0-9, zero or more times
  [1-9]        # 1-9
  [0-9]*       # 0-9, zero or more times
  (            #start capture group
   \.           # literal .
   [0-9]+       # 0-9, one or more times
  )?           #end group - make it optional
 |            #OR - If the first option didn't match, try alternate
  [0]+         # 0, one or more times ( change this to 0* for zero or more times )
  \.           # literal .
  [0-9]*       # 0-9, zero or more times
  [1-9]        # 1-9
  [0-9]*       # 0-9, zero or more times
 )            #end capture group
$             #match end of string

正则表达式内部有两个较小的模式,第一个模式匹配数字>= 1的情况(.的左边至少有一个非零字符),可选地允许一个带有一个或多个尾随数字的句号。第二个匹配<1.0,并确保点的右侧至少有一个非零数字。
Johannes的答案已经给出了问题的[0]*解决方案。
通过几个regexp快捷方式,您可以在大多数regexp风格中将[0-9]的任何示例替换为\d。另外,[0]只匹配0,因此您也可以使用0*而不是[0]*。最后的regexp:

/^(\d*[1-9]\d*(\.\d+)?|0*\.\d*[1-9]\d*)$/
xuo3flqw

xuo3flqw3#

我会用这个:

^(?:(?:0|[1-9][0-9]*)(?:\.[0-9]*)?|\.[0-9]+)$

这允许数字表达式以

  • 某些数字,后跟可选小数位,或
  • 只有小数位

允许:

123
123.
123.45
.12345

但不是:

.
01234
0yg35tkg

0yg35tkg4#

你也可以使用一个简单的表达式,如:

^[-+]?\d*(\.\d+)?$
shstlldc

shstlldc5#

改为:

^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]*\.[0-9]*[1-9][0-9]*)$

或者更短:

^(\d*[1-9]\d*(\.\d+)?|[0]*\.\d*[1-9]\d*)$
ioekq8ef

ioekq8ef6#

我一直在这方面的工作,从相当长的一段时间,我得到了一些很好的表达,效果很好

[+-]?(?:\d+|\D{0}\.\d+)(?:\.\d+)?

它识别带/不带前导0的数字/小数。以下是regx101上的演示
添加演示在这里的情况下链接不工作

import re      
x = "string .001 or -.001 or 1.00 or -1.00 or-213 or 123.132s1 or 012"   
print(re.findall(r"[+-]?(?:\d+|\D{0}\.\d+)(?:\.\d+)?", x))

O/P

['.001', '-.001', '1.00', '-1.00', '-213', '123.132', '1', '012']

相关问题