Python 制作一个正则表达式来验证整数和十进制数
我正在学习正则表达式,所以我试图使正则表达式能够验证给定输入是否为带/不带正号/减号的正确整数和十进制数 我已经用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
([+-]?[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)
可选[+-]?
或+
-
非捕获组(?:
匹配1+位0-9、点a和1+位0-9[0-9]+\[0-9]+
或|
匹配数字5-9的1+个匹配项[5-9]+
关闭组)
断言直接在右边的不是非空白字符(?!\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的时间,我非常感谢。你的解决方案奏效了。但我会接受“第四只鸟”的回答,因为它也描述了我的解决方案不起作用的原因。感谢您指出我的解决方案中的问题。我需要理解“先看后看”的概念。