正则表达式需求:匹配Grade开头且中间含Math的点分隔字符串
正则匹配两个点之间以Math开头的字符串
你的问题出在原正则的贪婪匹配上:.+会尽可能多的匹配字符,导致当字符串最后一个点前的内容以Math开头时(比如Grade 3.Demo Adaptive Module.Mathematics里的Mathematics),也会被误判为符合规则。你真正需要的是限定第一个点和第二个点之间的中间段必须以Math开头。
修正后的正则模式
带捕获组(保留中间段内容)
^[^.]+\.(Math.*)\.[^.]+ *$
不带捕获组(仅匹配整个字符串)
^[^.]+\.Math.*\.[^.]+ *$
模式解释
^:锚定字符串开头,避免匹配字符串中间的片段[^.]+:匹配一个或多个非点字符,确保只匹配第一个点之前的内容(不会跨点贪婪匹配)\.:匹配字面量点(需要转义,因为.在正则里是通配符)Math.*:匹配以Math开头的任意内容(中间段核心规则)[^.]+:匹配第二个点之后的非点内容*$:允许字符串末尾有0个或多个空格,然后锚定字符串结尾,适配你提供的带空格的示例
验证结果
- 符合匹配要求的示例全部命中:
Grade 8.Maths Test.Maths Grade 8.Maths Test.Maths Grade 6.Maths Formative Assessment.NA - 需要忽略的示例全部被排除:
Grade 3.Multiplication new.Mathematics Grade 3.Demo Adaptive Module.Mathematics Grade 4.Poetry.English Maths 4.Primary.Maths Maths 5.Primary.Concepts
内容的提问来源于stack exchange,提问作者Maniyan
相关产品推荐
相关产品推荐

