求助:正则表达式匹配两类字符串的两组内容问题
解决正则无法同时匹配两类字符串的问题
我来帮你找出问题并修正正则表达式:
原正则的问题分析
你的正则Lyra([A-Za-z]{3,6})+(\d{8}).*有两个关键问题:
- 字符类
[A-Za-z]只包含字母,无法匹配L4C里的数字4,所以这类字符串直接匹配失败; ([A-Za-z]{3,6})+中的+会让这个分组重复捕获(比如CalSWC会被拆成Cal和SWC两次匹配),最终第一组捕获的是最后一次匹配的片段(也就是SWC),而不是你想要的完整CalSWC。
修正后的正则表达式
把字符类扩展为包含字母和数字,同时去掉分组后的+,就能同时匹配两类字符串了:
Lyra([A-Za-z0-9]{3,6})(\d{8}).*
如果想精确匹配.png后缀,可以写成更严谨的版本:
Lyra([A-Za-z0-9]{3,6})(\d{8})\.png
正则各部分解释
Lyra:匹配固定前缀;([A-Za-z0-9]{3,6}):第一捕获组,允许字母和数字,长度3-6,完美覆盖L4C(3位)和CalSWC(6位);(\d{8}):第二捕获组,精确匹配8位数字日期;.*:匹配后续任意内容(如果不需要可以去掉,换成精确的.png更严谨)。
测试效果
- 对于
LyraCalSWC20161203.png,第一组捕获CalSWC,第二组捕获20161203; - 对于
LyraL4C20180302.png,第一组捕获L4C,第二组捕获20180302。
内容的提问来源于stack exchange,提问作者user1472672
相关产品推荐
相关产品推荐

