如何用正则表达式提取连字符连接的字母数字子串?
解决方案
正则表达式
使用以下正则表达式可精准提取目标子串:
[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)+
匹配逻辑说明
[a-zA-Z0-9]+:匹配开头的字母数字序列(至少1个字符)(?:-[a-zA-Z0-9]+)+:匹配「连字符+字母数字序列」的组合,且该组合至少出现一次(确保子串包含连字符)- 整个表达式保证匹配的子串仅由字母数字和连字符构成,且连字符不会出现在子串首尾,同时能完美区分纯字母/纯数字的无关子串(如
RAM、001这类不会被匹配)
验证示例
针对你给出的三个字符串变体:
'001_AML-Micro-CTD_RAM_20220101'→ 匹配结果:AML-Micro-CTD'001_RAM_20220101_AML-Micro-CTD'→ 匹配结果:AML-Micro-CTD'001_AML-Micro-CTD_RAM_20220101'→ 匹配结果:AML-Micro-CTD
失效原因分析
你之前使用的[a-zA-Z-]类表达式仅匹配单个符合要求的字符,没有约束子串的整体结构,导致会错误包含后续连续的字母(比如RAM)。而上述正则通过明确的结构规则,仅匹配由连字符连接的字母数字片段组合,避免了无关内容的混入。
内容的提问来源于stack exchange,提问作者PaulR
相关产品推荐
相关产品推荐

