如何编写正则表达式:判断字符串是否每隔一位为e或空格(支持奇偶起始)
交替分隔单字符序列校验正则实现
匹配规则梳理
结合示例样例和实际使用场景,先把校验逻辑明确下来,避免歧义:
- 分隔字符(示例用
e指代,实际场景可替换为空格)不允许连续出现 - 非分隔字符不允许连续排布,必须被分隔字符隔开
- 序列支持两种起始方式:从非分隔字符开始、从分隔字符开始
- 长度为2的任意组合均判定为非法,拒绝"eA"、"Ae"这类仅含一组字符、无完整交替结构的字符串
- 单独的分隔字符判定为合法
核心正则表达式
针对分隔字符为e的场景,可直接使用以下全字符串匹配正则完成校验:^(e$|[^e](e[^e])+e?$|e([^e]e)+[^e]?$)
分支逻辑说明
- 第一分支
^e$:匹配单独的e字符,覆盖长度为1的合法分隔符场景 - 第二分支
[^e](e[^e])+e?$:匹配从非e字符起始的序列- 强制以非
e字符开头 - 要求后续至少跟随1组"e + 非e字符"的交替单元,从结构上杜绝单字符非
e、短长度无交替结构的非法字符串 - 末尾可选择性跟随一个
e,覆盖以分隔符结尾的合法场景
- 强制以非
- 第三分支
e([^e]e)+[^e]?$:匹配从e字符起始的序列- 强制以
e字符开头 - 要求后续至少跟随1组"非e字符 + e"的交替单元,从结构上杜绝连续
e开头、"eA"这类短长度无交替结构的非法字符串 - 末尾可选择性跟随一个非
e字符,覆盖以非分隔符结尾的合法场景
- 强制以
实际场景适配(分隔符为空格)
如果需要校验空格分隔的单字符序列(比如"W o W"、"S W E E T "这类格式),只需要把正则中匹配e的部分替换为空格的匹配规则,得到的适配正则为:^(\s$|[^\s](\s[^\s])+\s?$|\s([^\s]\s)+[^\s]?$)
这个正则会自动拒绝带连续空格的字符串,比如"H O L Y S M O K E S"这类含双空格的内容——连续空格会直接打破交替匹配的规则,无法通过校验。
边缘场景覆盖验证
对照给定的合法、非法样例,正则可实现100%匹配覆盖:
- 所有给定合法字符串均可正常匹配
- 所有给定非法字符串(单字符、连续同类型字符、短长度无完整交替结构的字符串)均会被拒绝
内容的提问来源于stack exchange,提问作者Gulzar
相关产品推荐
相关产品推荐

