数字的python正则表达式,末尾带有可选的*
我正在努力为以下示例(在python中)找到正则表达式模式 字符串应以1到99之间的数字开头,并且可以有0、1、, 末尾有2或3个数字的python正则表达式,末尾带有可选的*,python,regex,Python,Regex,我正在努力为以下示例(在python中)找到正则表达式模式 字符串应以1到99之间的数字开头,并且可以有0、1、, 末尾有2或3个*标记。其他任何东西都是无效的 ”->NOK(必须至少包含一个数字) “1”->正常 “99”->正常 “100”->NOK(最大数量为99) “1*”->正常 “1**”->正常 “1***”->好的 “1****”->->NOK(最多3个*) “99***”->正常 “*1”->NOK(*仅在后面) “1*1”->NOK(*仅在后面) “1*”->NOK(包含空
*
标记。其他任何东西都是无效的
->NOK(必须至少包含一个数字)”
->正常“1”
->正常“99”
->NOK(最大数量为99)“100”
->正常“1*”
->正常“1**”
->好的“1***”
->->NOK(最多3个*)“1****”
->正常“99***”
->NOK(*仅在后面)“*1”
->NOK(*仅在后面)“1*1”
->NOK(包含空格:非数字或*)“1*”
“^[0-9]{1,2}|^([0-9]{1,2})(\Z\*)”
但是它没有捕获“1*1”
或“1*”
案例:(
以下是python代码和测试:
也许这个正则表达式会有帮助
should_start_with_number_and_may_end_with_marker = "^[1-9][0-9][\*]{0,3}"
正则表达式:
r'^[1-9][0-9]?[\*]{0,3}$'
匹配测试用例
解释
-1到9是第一个字符^[1-9]
-可选第二个字符0到9[0-9]?
-0到3*在字符串末尾[\\*]{0,3}$
$
gr8确实有效-谢谢!!-很抱歉回复太晚-我被其他挑战分散了注意力:)
import unittest
from ControlePunt import ControlePunt, NoControlePunt
class ValidControlePuntTests(unittest.TestCase):
def test_valid_numeric(self):
self.assertEqual(ControlePunt.__name__, type(ControlePunt.create("21")).__name__)
def test_valid_numeric_with_1_marker(self):
self.assertEqual(ControlePunt.__name__, type(ControlePunt.create("21*")).__name__)
def test_valid_numeric_with_2_markers(self):
self.assertEqual(ControlePunt.__name__, type(ControlePunt.create("21**")).__name__)
def test_valid_numeric_with_3_markers(self):
self.assertEqual(ControlePunt.__name__, type(ControlePunt.create("21***")).__name__)
class InvalidControlePuntTests(unittest.TestCase):
def test_empty(self):
self.assertEqual(NoControlePunt.__name__, type(ControlePunt.create("")).__name__)
def test_only_marker(self):
self.assertEqual(NoControlePunt.__name__, type(ControlePunt.create("*")).__name__)
def test_non_numeric(self):
self.assertEqual(NoControlePunt.__name__, type(ControlePunt.create("a1")).__name__)
def test_marker_before_numbers(self):
self.assertEqual(NoControlePunt.__name__, type(ControlePunt.create("*1")).__name__)
def test_marker_surrounded_by_numbers(self):
self.assertEqual(NoControlePunt.__name__, type(ControlePunt.create("1*1")).__name__)
def test_containing_illegal_characters(self):
self.assertEqual(NoControlePunt.__name__, type(ControlePunt.create("1 *")).__name__)
if __name__ == '__main__':
unittest.main()
should_start_with_number_and_may_end_with_marker = "^[1-9][0-9][\*]{0,3}"