如何用正则表达式匹配字符串中XXX或XYX模式字符(排除特殊字符与空格)
正则匹配字符串中连续重复字母序列或XYX模式
需求说明
从字符串中提取两类字母序列,自动排除空格、特殊字符:
- 连续重复字母序列:长度≥3的相同字母连续出现(如
ooo、ssss) - XYX三元组:首尾字母相同、中间字母不同的连续三个字母(如
ele、iti)
核心正则表达式(支持重叠匹配)
(?i)(?=(([a-z])\1{2,}|([a-z])(?!\3)[a-z]\3))\1
正则解析
(?i):开启不区分大小写模式,兼容大小写字母匹配(?=...):正向零宽断言,实现重叠匹配(不消耗字符串字符,允许从当前位置的下一个字符再次匹配,比如llll会被识别为两个lll)([a-z])\1{2,}:匹配连续重复字母序列——捕获单个字母后,匹配至少2个相同字母,确保整体长度≥3([a-z])(?!\3)[a-z]\3:匹配XYX三元组——捕获首字母后,用(?!\3)确保中间字母与首尾不同,最后匹配与首字母相同的尾字母\1:提取断言内捕获的完整匹配结果
简化版正则(不支持重叠匹配)
如果不需要拆分连续重复的长序列(比如不想把 llll 拆成两个 lll),可以使用:
(?i)([a-z])\1{2,}|([a-z])(?!\2)[a-z]\2
匹配示例
| 输入 | 输出 |
|---|---|
oooh my god | ooo |
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch | gog, lll, lll, ogo, gog, ogo, gog, ogo |
Jewnited Snakes of Amerikkka | kkk |
skilllessness | lll |
salpingooophoritis | ooo, iti |
princessship / mistressship | ssss, sss |
same letter / triple letters | ele |
内容的提问来源于stack exchange,提问作者ArtBindu
相关产品推荐
相关产品推荐

