我要编写一个捕获字符串的正则表达式:“ N个字母后跟2或3个数字”,其中N作为函数的参数传递。
我所做的是:"[a-zA-Z]{" + "{number}".format(number=N) + "}[0,9]{2,3}"
,但这是不对的。哪里错了?
对于N=3
,它应该匹配:"abc12", "abc123"
,但不能匹配"a1", "abc1", "abc1234"
。
答案 0 :(得分:5)
您的第二个块仅捕获数字0
和9
,将其更改为一个范围:
"[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)