首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >做一个正则表达式来验证整数和十进制数。

做一个正则表达式来验证整数和十进制数。
EN

Stack Overflow用户
提问于 2020-01-23 16:07:13
回答 2查看 120关注 0票数 0

我正在学习regex,所以我尝试使用regex来验证给定输入的正确整数和十进制数,并带有/不带正/减号。

我在python中创建了regex:

代码语言:javascript
运行
复制
([+-]?[0-9]+\.[0-9]+)|([+-]?[5-9]+)

但它不能正常工作。它的展示

代码语言:javascript
运行
复制
# 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

有人能指出我做错了什么吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-23 18:09:53

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

例如,您可以更新模式,使第二部分在右侧不是点(?!\.)时不匹配,或者可能断言不是非空格字符(?!\S)

由于在这两种模式中都使用了[+-]?,所以可以将其移出替换之外。

代码语言:javascript
运行
复制
[+-]?(?:[0-9]+\.[0-9]+|[5-9]+)(?!\S)
  • [+-]?可选+-
  • (?:非捕获群
    • [0-9]+\.[0-9]+匹配1+数字0-9,点a和1+数字0-9。
    • |
    • [5-9]+匹配数字5-9的1+出现

  • )紧群
  • (?!\S)断言直接在右边的不是非空格字符

Regex演示 x- Python演示

票数 0
EN

Stack Overflow用户

发布于 2020-01-23 16:13:38

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

假设你只想验证小数,如果后面有数字

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59882709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档