【问题标题】:Make a regex to validate integer and decimal number as well制作一个正则表达式来验证整数和十进制数
【发布时间】:2020-01-24 02:09:53
【问题描述】:

我正在学习正则表达式,所以我正在尝试制作正则表达式,它应该将给定的输入验证为正确的整数和十进制数字,带/不带正号/减号。

我在 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

谁能指出我在这里做错了什么? 谢谢

【问题讨论】:

  • 为什么你有[5-9]作为一个单独的案例?
  • 只是玩弄这些范围来清除概念。
  • 那么您还需要调整[0-9] 以捕获小数点前的数字0、1、2、3和4:([+-]?[0-4]+\.[0-9]+)|([+-]?[5-9]+)
  • 最后 2 个得到匹配,因为模式是交替的,它的第二部分 ([+-]?[5-9]+) 匹配 5. 中的 5 您可以将模式更新为 [+-]?(?:[0-9]+\.[0-9]+|[5-9]+(?!\S)) regex101.com/r/KpQZKG/1跨度>

标签: python regex


【解决方案1】:

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

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

【讨论】:

  • 感谢 Sunny 抽出宝贵时间,非常感谢。你的解决方案奏效了。但我会接受“第四只鸟”的回答,因为它也说明了我的解决方案为什么不起作用。
【解决方案2】:

该模式匹配最后 2 个示例,因为它使用了 alternation,其中第二部分 ([+-]?[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]+ 匹配 1+ 个数字 5-9
  • )关闭群
  • (?!\S)断言右边的不是非空白字符

Regex demo | Python demo

【讨论】:

猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
相关资源
最近更新 更多