捕获N个字母,然后捕获2或3个数字

时间:2018-12-04 16:01:17

标签: python regex

我要编写一个捕获字符串的正则表达式:“ N个字母后跟2或3个数字”,其中N作为函数的参数传递。

我所做的是:"[a-zA-Z]{" + "{number}".format(number=N) + "}[0,9]{2,3}",但这是不对的。哪里错了?

对于N=3,它应该匹配:"abc12", "abc123",但不能匹配"a1", "abc1", "abc1234"

2 个答案:

答案 0 :(得分:5)

您的第二个块仅捕获数字09,将其更改为一个范围:

"[a-zA-Z]{%d}[0-9]{2,3}"%N 

编辑: 要捕获不匹配的内容,您需要向正则表达式添加开始条件和结束条件。这可以通过以下几种方式完成:

文本锚点

如果您的图案要单独出现在一行上,请指定开始和结束行:

"^[a-zA-Z]{%d}[0-9]{2,3}$"%N

其中^代表行的开始,$代表行的结束

指定匹配

您可以说匹配模式后的特定字符:

"[a-zA-Z]{%d}[0-9]{2,3}[^0-9]+"

括弧内的^表示“不匹配这些字符”。我对前瞻/回溯还不够熟悉,无法使用它们为您提供良好的答案,但是可以在here

中找到文档

答案 1 :(得分:2)

您需要在表达式中添加锚点:

^[a-z]{3}\d{2,3}$

请参见a demo on regex101.com


通常:

^[a-z]{n}\d{2,3}$
#     ^^^