首页 > 解决方案 > 捕获 N 个字母,然后捕获 2 或 3 个数字

问题描述

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

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

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

标签: pythonregex

解决方案


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

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

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

文本锚点

如果您的图案要单独在一条线上,则开始和结束线指定:

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

where^代表行首和$行尾

指定匹配

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

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

括号内^会显示“不匹配这些字符”。我对前瞻/回顾不够熟悉,无法使用它们给你一个很好的答案,但可以在此处找到文档


推荐阅读