如何编写正则表达式实现多个指定模式的全量行匹配
正则调整方案
原正则问题分析
你编写的正则强制要求匹配!加版本号的部分,没有覆盖无版本后缀的A-Test、ATest两种场景,同时对连字符、版本号的匹配规则也不够严谨,因此无法匹配所有目标行。
目标模式规律拆解
你需要匹配的4类模式符合以下规则:
- 开头固定为
A - 后接可选连字符
- - 后接固定字符串
Test - 后接可选的版本后缀:以
!开头,后跟数字.数字或数字.数字.数字格式的版本号
最终可用正则
根据使用场景不同选择对应写法即可:
场景1:提取中括号内的目标内容
正则:
\[(A-?Test(?:!\d+\.\d+(?:\.\d+)?)?)\]
规则说明:
- 外层
\[、\]匹配目标串外层的方括号 - 捕获组1的内容就是你需要的目标串:
A:匹配开头固定字符A-?:匹配可选的连字符,覆盖A-Test和ATest两种情况Test:匹配固定的Test字符串(?:!\d+\.\d+(?:\.\d+)?)?:非捕获的可选版本后缀:!匹配固定感叹号\d+\.\d+匹配两位版本号(如1.2)(?:\.\d+)?匹配可选的第三位版本号(如.3)- 最外层
?表示整个版本后缀可选,覆盖无后缀的场景
场景2:匹配所有包含目标串的完整行
正则(需开启多行匹配模式):
^.*\[A-?Test(?:!\d+\.\d+(?:\.\d+)?)?\].*$
内容的提问来源于stack exchange,提问作者cool_stuff_coming
相关产品推荐
相关产品推荐

