Python正则如何实现长度超X的单词末尾N个字符加方括号包裹
正则替换实现方案
核心调整逻辑:原逻辑是捕获整个符合长度要求的单词整体套方括号,现在只要把正则拆成两个捕获组,分别匹配「单词前半段(不需要套括号的部分)」和「单词最后N位(需要套括号的部分)」,替换时保留前半段内容,仅给最后N位包裹方括号即可。
可直接运行的代码
你可以通过两个参数灵活控制规则:
min_word_len:触发替换的单词最小长度,对应需求里「长度超过X位」的阈值(当前场景是超过7位,即最小长度为8)wrap_suffix_len:需要包裹方括号的尾部字符长度,对应需求里的N值(当前示例N=1)
import re # 规则参数,可按需调整 min_word_len = 8 wrap_suffix_len = 1 # 正则结构说明: # 1. 用\b锚定单词边界,避免误匹配单词内部片段 # 2. 第一个捕获组匹配单词前半段(总长度减去尾部要包裹的N位) # 3. 第二个捕获组匹配单词尾部要包裹的N位,最后用\b锚定单词结束位置 pattern = rf"\b([A-ZÀ-ÖØ-Ýà-öø-ÿa-z]{{{min_word_len - wrap_suffix_len},}})([A-ZÀ-ÖØ-Ýà-öø-ÿa-z]{{{wrap_suffix_len}}})\b" # 测试文本 text = "253. Ficam revogadas a Lei nº 1.711, de 28 de outubro de 1952, e respectiva legislação complementar, bem como as demais disposições em contrário." text = re.sub(pattern, r"\1[\2]", text) print(text)
运行输出
运行后结果和预期逻辑完全匹配:
253. Ficam revogada[s] a Lei nº 1.711, de 28 de outubro de 1952, e respectiv[a] legislaçã[o] complementa[r], bem como as demais disposiçõe[s] em contrári[o].
注意事项
- 保留了原正则里的带重音拉丁字符匹配范围,葡语等带特殊变音符号的西语系词汇不会出现匹配异常
- 如果后续要调整规则,比如给长度超过10位的单词最后3个字母加括号,只需要把参数改成
min_word_len=11、wrap_suffix_len=3即可,不需要修改正则主体结构 - 用单词边界
\b做锚定后,不会把数字、标点旁边的字符误判为单词内容,匹配准确率比原正则更高
内容的提问来源于stack exchange,提问作者MyDisplay
相关产品推荐
相关产品推荐

