正则表达式需求:捕获除Ess与Nb间空白外的所有空白字符
解决方案
要实现捕获所有空白字符但排除Ess和Nb之间的两个空格,可以根据运行环境选择以下两种正则方案:
方案一:PCRE环境(PHP、Python、Perl等)
利用(*SKIP)(*FAIL)标记跳过不需要的片段,语法直观易懂:
(?:Ess\s{2}Nb)(*SKIP)(*FAIL)|\s+
规则解释:
(?:Ess\s{2}Nb):用非捕获组匹配Ess+两个空格+Nb的完整片段,避免捕获该片段本身(*SKIP)(*FAIL):让匹配到的上述片段直接跳过,不参与后续捕获逻辑|\s+:匹配所有剩余的连续空白字符,也就是你需要捕获的目标内容
测试示例(Python):
import re text = "ED Ess Nb Ip" matches = re.findall(r'(?:Ess\s{2}Nb)(*SKIP)(*FAIL)|\s+', text) print(matches) # 输出: [' ', ' ']
方案二:兼容ES2018+的JavaScript等环境
如果环境不支持(*SKIP)(*FAIL),可以用负向后断言组合排除目标空格:
\s+(?<!Ess\s(?=\sNb))
规则解释:
\s+:匹配连续空白字符(?<!Ess\s(?=\sNb)):负向后断言,确保当前空白字符的前面不是Ess+一个空格(且该空格后紧跟着一个空格+Nb),以此精准排除Ess和Nb之间的两个空格
测试示例(JavaScript):
const text = "ED Ess Nb Ip"; const pattern = /\s+(?<!Ess\s(?=\sNb))/g; const matches = text.match(pattern); console.log(matches); // 输出: [' ', ' ']
内容的提问来源于stack exchange,提问作者obchardon
相关产品推荐
相关产品推荐

