Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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,我想通过def函数编写regex模式,让它命名为_number(string),它检查string是否是范围为-49到49的整数。此外,数字不应包含不重要的零 所以我想通过测试: self.assertTrue(is_number("50")) self.assertTrue(is_number("-50")) self.assertTrue(is_number("-9")) self.assertFalse(is_number("

我想通过def函数编写regex模式,让它命名为_number(string),它检查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)

试试这个正则表达式模式

^[-]?[0-4]?\d$
第一位数字必须在四位数字0、1、2、3和4之间,最后一位数字可以是任意数字

pattern = r'^-?[0-4]?\d$'

尝试此正则表达式模式

模式匹配

  • 带前导1、2、3或4的两位数(正数和负数)
  • 或任何一位数字(正数和负数)
正则表达式:

^(-?[1-4]\d|-?\d)$
要达到49到负49的范围,您的测试实际上应该如下所示:

    self.assertFalse(is_number("50"))  #  50 must be assertFalse
    self.assertFalse(is_number("-50"))  #  -50 must be assertFalse
    self.assertTrue(is_number("-9"))
    self.assertTrue(is_number("7"))   #  7 must be assertTrue
    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"))
你可以用

^-?(?:[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)$

这不是你要问的问题,但是,为什么不将字符串转换为整数,然后使用比较运算符确保数字在正确的范围内?我只需要使用regext。如果范围为-49到+49,则前两个断言应为assertFalse。这将不匹配像-9这样的单位数字。这将与数字的部分匹配,而不仅仅是对于整数-您将需要符号“^”和$以确保捕获整数。如果assert不通过第一个assert-如果assert将为assertFalse“”,如果字符串是范围为-49到49“”的整数,则为“”。如果50和-50超出了您指定的范围,为什么您要尝试在50和-50上断言True?任务说明-必须完成所有这些任务,那么您的任务说明是错误的。如果您的范围在-49到49之间,则50和-50不能断言为True。假设我们没有self.assertTrue(是u number(“50”))。Regex在self.assertFalse处不通过(是u编号(“7”))。也许它应该是一个整体模式的否定?匹配50和-50也会改变有效数字的范围……这是正确的,只有在问题中有self.assertTrue(is_number(“50”))self.assertTrue(is_number(“-50”))我仍然认为测试是错误的,而不是试图改变函数通常接受的内容;)您的模式通过self.assertFalse(is_temperature(“7”))@jptak,然后使用此模式所有测试都将成功
^-(?:[0-689]|[1-4][0-9]| 50)$