如何将用或运算符分隔的三段正则表达式合并为单个正则?
正则表达式合并方案
你给出的三段正则,核心是匹配至少有一侧与非空白字符相连的aFrom(排除aFrom单独作为独立词的场景),三段分别覆盖:
aFrom前后均为非空白字符aFrom前为非空白,后为空白、回车或文本结尾aFrom前为空白、回车或文本开头,后为非空白字符
合并后的等价正则
简化分支版
将前两个分支合并(二者前置断言相同,后置断言可合并为空白/结尾/非空白,即所有合法结尾),最终得到两段分支的正则,功能与原三段完全一致:
return new Regex(@"(?<=\S)" + aFrom + @"(?=\S|\s|$)|(?<=\s|^)" + aFrom + @"(?=\S)", aCaseSensitivity);
单分支极简版
利用负向断言排除aFrom单独成词的场景,直接匹配符合要求的aFrom,写法更紧凑:
return new Regex(@"(?!(?<=\s|^)" + aFrom + @"(?=\s|$))" + aFrom, aCaseSensitivity);
逻辑验证
两种合并方案都完全覆盖原正则的所有匹配场景:
- 匹配
aFrom前后均为非空白的情况 - 匹配
aFrom前非空白、后为空白/结尾的情况 - 匹配
aFrom前为空白/开头、后非空白的情况 - 不匹配
aFrom单独作为独立词(前后为空白/开头结尾)的情况
内容的提问来源于stack exchange,提问作者DanTheMan
相关产品推荐
相关产品推荐

