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

如何使用正则表达式在字符串的第三个大写字母前添加字符?

解决方案:在第三个大写字母前添加指定字符

要实现这个需求,我们可以利用正则的零宽断言精准定位第三个大写字母的起始位置,然后插入指定字符(比如短横线-),全程不会破坏原字符串的其他结构。

核心正则方案

查找模式

(?<=(?:[^A-Z]*[A-Z]){2})(?=[A-Z])

替换内容

-

正则逻辑拆解

我来一步步拆解这个正则的作用,帮你理解它的精准性:

  • (?<= ... ):正向回顾后发断言,确保当前位置的前面刚好匹配完前两个大写字母的结构
  • (?:[^A-Z]*[A-Z]){2}:非捕获分组,匹配「任意数量非大写字母 + 一个大写字母」的组合,重复2次——这就刚好覆盖了字符串里的前两个大写字母及其前面的内容
  • (?=[A-Z]):正向预查断言,确保当前位置的后面紧跟着一个大写字母(也就是我们要处理的第三个大写字母)

这个正则匹配的是一个「零宽位置」(不会消耗任何字符),所以替换时只需要在这个位置插入目标字符即可。

代码示例

JavaScript

const originalStr = "SuisseIntlBlack.woff2";
const modifiedStr = originalStr.replace(/(?<=(?:[^A-Z]*[A-Z]){2})(?=[A-Z])/, "-");
console.log(modifiedStr); // 输出:SuisseIntl-Black.woff2

Python(3.7+ 支持后发断言)

import re

original_str = "SuisseIntlBlack.woff2"
modified_str = re.sub(r'(?<=(?:[^A-Z]*[A-Z]){2})(?=[A-Z])', '-', original_str)
print(modified_str) # 输出:SuisseIntl-Black.woff2

边界情况说明

  • 如果字符串中的大写字母数量少于3个,这个正则不会进行任何替换,避免产生意外结果
  • 如果大写字母连续出现(比如ABCDef.woff2),会在第三个大写字母C前插入字符,得到AB-CDef.woff2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:44:05