如何编写匹配若干空格后单个s且不捕获s开头单词的正则表达式
单个s匹配正则调整方案
原正则问题分析
你当前使用的正则((\s)+(s){1,1})没有对s的后续字符做边界限制,只要空格后出现s就会命中,所以会误捕获suffering、spaces这类s开头单词的首字母。
调整后正则
仅匹配小写s
\s+s(?!\S)
如果需要单独提取匹配到的s,可以增加捕获组:
\s+(s)(?!\S)
捕获组1即为目标单个s。
同时匹配大小写s(适配测试用例中的大写S场景)
\s+s(?!\S)
匹配时添加i修饰符即可,不同语言写法不同,例JavaScript中为/\s+s(?!\S)/i。
正则逻辑说明
\s+:匹配1个或多个空白字符,满足前置空格要求s:匹配目标字母s(?!\S):负向前瞻断言,校验s后面的字符不能是非空白字符,也就是说s后面只能是空白或者字符串结尾,保证s是单独出现的,不会和后续字符组成单词
匹配效果验证
对应你提供的测试用例,仅命中以下合法场景:
word s word s中的两处sword s中的sword s some ss spaces中的swords S s中的s(开启大小写匹配时额外命中S)
其余s开头单词、缩写中的s、连续的ss都不会被误匹配。
扩展适配(可选)
如果允许单个s后面跟标点符号(例如s,、s.这类场景也需要命中),可以把负向前瞻换成单词边界即可:
\s+s\b
内容的提问来源于stack exchange,提问作者dimButTries
相关产品推荐
相关产品推荐

