Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 制作一个正则表达式来验证整数和十进制数_Python_Regex - Fatal编程技术网

Python 制作一个正则表达式来验证整数和十进制数

Python 制作一个正则表达式来验证整数和十进制数,python,regex,Python,Regex,我正在学习正则表达式,所以我试图使正则表达式能够验证给定输入是否为带/不带正号/减号的正确整数和十进制数 我已经用python创建了正则表达式: ([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+) 但它不能正常工作。它的表演 # expecting left side expression of pipe-sign is running re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","1.1") # true correct

我正在学习正则表达式,所以我试图使正则表达式能够验证给定输入是否为带/不带正号/减号的正确整数和十进制数

我已经用python创建了正则表达式:

([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)
但它不能正常工作。它的表演

# expecting left side expression of pipe-sign is running
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","1.1") # true correct
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","1.") # false correct
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","1") # false  correct

# expecting right side expression of pipe-sign is running
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","5") # true  correct
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","5.") # true  Wrong
re.search("([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)","5.") # true  Wrong
有人能指出我做错了什么吗?
谢谢

如果您真的想用十进制数验证整数,您可以使用以下命令:
^(++-]?[0-9]+(?:\.[0-9]+)?)$
,应该足够了。可以在进行验证

假设您只想验证后面有数字的小数


该模式与最后两个示例匹配,因为它使用了第二部分
([+-]?[5-9]+)
5中的5匹配。

例如,当右侧不是点
(?!\)
,或者可能声明不是非空白字符
(?!\S)
时,可以更新模式以使第二部分不匹配

由于这两种模式都使用了
[+-]?
,因此您可以将其移到交替模式之外

[+-]?(?:[0-9]+\.[0-9]+|[5-9]+)(?!\S)
  • [+-]?
    可选
    +
    -
  • (?:
    非捕获组
    • [0-9]+\[0-9]+
      匹配1+位0-9、点a和1+位0-9
    • |
    • [5-9]+
      匹配数字5-9的1+个匹配项
  • 关闭组
  • (?!\S)
    断言直接在右边的不是非空白字符

|

为什么要将
[5-9]
作为一个单独的例子?只需使用这些范围来明确概念。然后,您需要调整
[0-9]
以及捕获小数点前的数字0、1、2、3和4:
([+-]?[0-4]+\[0-9]+)|([+-]?[5-9]+)
最后2个匹配,因为模式是一个替代模式,它的第二部分与
中的5个匹配。
您可以将模式更新为
[+-](?:[0-9]+\[0-9]+[5-9]+(?!\S))
谢谢Sunny的时间,我非常感谢。你的解决方案奏效了。但我会接受“第四只鸟”的回答,因为它也描述了我的解决方案不起作用的原因。感谢您指出我的解决方案中的问题。我需要理解“先看后看”的概念。