数字的python正则表达式,末尾带有可选的*

数字的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(包含空

我正在努力为以下示例(在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(包含空格:非数字或*)
我走了这么远:
“^[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}"