You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python正则表达式中传递重复次数参数?

解决正则函数匹配指定长度单词返回空的问题

嘿,这个问题我之前也踩过坑!你写的函数里,正则字符串里的{n}并没有被替换成你传入的参数值——因为Python带r前缀的原始字符串不会自动把变量插入进去,所以正则引擎其实在尝试匹配字面量的{n},自然找不到符合要求的单词。

问题根源

你的原始代码里:

return re.findall(r"\b[a-zA-z]{n}\b", text)

这里的{n}就是字符串里的普通字符,正则引擎不会把它当成变量n的值来解析。顺便提一句:[a-zA-z]这个范围其实有问题,A-z会包含[、\这类非字母字符,应该写成[a-zA-Z]来严格匹配大小写字母。

正确的解决方案

这里有几种靠谱的写法:

1. 使用f-string格式化(Python 3.6+推荐)

用f-string动态生成正则表达式,注意要把量词里的{}转义(用{{}}),这样最终会生成正确的{5}格式:

import re
def findwords(text, n):
    return re.findall(rf"\b[a-zA-Z]{{{n}}}\b", text)

2. 使用str.format()方法(兼容旧版本Python)

如果需要支持Python 3.5及更早版本,用format方法也可以:

import re
def findwords(text, n):
    pattern = r"\b[a-zA-Z]{{{0}}}\b".format(n)
    return re.findall(pattern, text)

3. 字符串拼接(不推荐,但可以用)

虽然能工作,但字符串拼接容易出错,尤其是当参数类型复杂时,需要手动转成字符串:

import re
def findwords(text, n):
    pattern = r"\b[a-zA-Z]{" + str(n) + r"}\b"
    return re.findall(pattern, text)

测试一下

调用修正后的函数:

print(findwords('The quick brown fox jumps over the lazy dog.', 5))

会返回预期的结果:['quick', 'brown', 'jumps']

内容的提问来源于stack exchange,提问作者cDub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:10:26