首页 > 解决方案 > 通过测试的正则表达式模式

问题描述

我想通过 def 函数编写正则表达式模式,让它命名为 is_number(string),它检查字符串是否是 -49 到 49 范围内的整数。数字也不应该包含无关紧要的零。

所以我想通过测试:

        self.assertTrue(is_number("50"))
        self.assertTrue(is_number("-50"))
        self.assertTrue(is_number("-9"))
        self.assertFalse(is_number("7"))
        self.assertFalse(is_number("-200"))
        self.assertTrue(is_number("-21"))
        self.assertTrue(is_number("18"))
        self.assertTrue(is_number("0"))
        self.assertTrue(is_number("49"))
        self.assertFalse(is_number("100"))
        self.assertTrue(is_number("-49"))

我尝试了类似的东西,但它不起作用:

def is_number(string):
    pattern = r'[-]?\d[1,4]{1,2}*'
    return re.search(pattern, string)

标签: pythonregex

解决方案


你可能会使用

^-?(?:[0-9]|[1-4][0-9])$

那将匹配

  • ^字符串的开始
  • -?可选的-
  • (?:非捕获组
    • [0-9]匹配一个数字 0-9
    • |或者
    • [1-4][0-9]匹配数字 1-4 和数字 0-9 以匹配范围 10 - 49
  • )关闭组
  • $字符串结束

正则表达式演示

如果您还想匹配 50 和 -50 并且 7 不应该匹配,您可以将 50 添加到交替中并使用匹配数字 0-6、8 和 9

^-?(?:[0-689]|[1-4][0-9]|50)$

正则表达式演示


推荐阅读