You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式匹配同一句子中无英文句号分隔的两个单词

匹配同一句子中未被句号分隔的两个单词的正则方案

嘿,我之前刚好处理过类似的需求,咱们直接来拆解解决思路:

核心正则表达式

假设你要匹配的两个目标单词是hello和there,可以用这个正则(支持单词顺序互换):

\b(hello)\b(?:(?!\.).)*?\b(there)\b|\b(there)\b(?:(?!\.).)*?\b(hello)\b

各部分解释

  • \b:单词边界,确保匹配的是完整单词,不会把helloworld误判为hello
  • (hello) / (there):捕获组,用来定位你要找的目标单词
  • (?:(?!\.).)*?:这是关键的"防句号"逻辑:
    • (?!\.) 是负向前瞻断言,保证接下来的字符不是英文句号
    • .*? 是非贪婪模式的任意字符匹配,避免过度匹配到其他句子里的内容
    • (?:...) 是一个非捕获组,不会额外存储匹配结果,只用来包裹逻辑
  • 竖线|:用来同时匹配两个单词的两种顺序(hello在前/there在前)

实用修饰符

根据你的场景可以添加这些修饰符:

  • i:不区分大小写,比如能匹配Hello、THERE这类变体
  • s:允许.匹配换行符,适用于句子跨多行但没句号的情况

示例验证

咱们用你给出的例子测试:

示例1:My name is Danny. Hello. I am there. whats up ?
这里Hello和there被句号分隔在不同句子,正则不会匹配到任何结果

示例2:My name is Danny. Hello there. whats up ?
两个单词处于同一个句号分隔的片段里,正则会成功匹配到Hello there

自定义修改

如果要匹配其他单词组合,只需要把正则里的hello和there替换成你的目标单词就行,比如要匹配apple和banana,直接改成:

\b(apple)\b(?:(?!\.).)*?\b(banana)\b|\b(banana)\b(?:(?!\.).)*?\b(apple)\b

内容的提问来源于stack exchange,提问作者Irad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:28:56