如何使用REGEX匹配排除指定单词内部的所有短横线?
解决方案
方案1:多步替换(推荐,逻辑简单不易出错,全引擎兼容)
总共3步操作,不需要复杂正则基础:
- 第一步:把你排除列表里的所有单词中的
-替换为一个原始文本中绝对不会出现的临时占位符,例如把start-up替换为start@temp@up、new-york替换为new@temp@york,剩下的3-4个排除词按同样规则处理即可。 - 第二步:匹配所有
-,统一替换为<br>-,这一步不会命中已经被替换成占位符的单词内部短横线。 - 第三步:把所有临时占位符
@temp@替换回-即可。
方案2:单条正则一步实现
如果需要只用一条正则完成匹配,可以用负向环视实现,假设你的排除词为start-up、new-york、foo-bar、test-demo四个,正则写法如下:
(?<!\b(start|new|foo|test))-(?!\b(up|york|bar|demo)\b)
你只需要按顺序把排除词中短横线左侧的部分放到第一个括号的分组里,短横线右侧的部分放到第二个括号的分组里,新增排除词按相同规则追加到对应分组即可。匹配到的-直接替换为<br>-就能达到预期效果。
内容的提问来源于stack exchange,提问作者Joachim
相关产品推荐
相关产品推荐

