Python 通过测试的正则表达式模式
我想通过def函数编写regex模式,让它命名为_number(string),它检查string是否是范围为-49到49的整数。此外,数字不应包含不重要的零 所以我想通过测试: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("
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以匹配范围10-49[1-4][0-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)$