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

如何实现含特殊字符的完整子串匹配?替代\b正则方法

朴素字符串匹配方案实现

原有方案的问题

现有字符串匹配代码依赖正则的单词边界\b实现:

import re

def contains(string, word):
    return bool(re.search(rf"\b{word}\b", string))

但\b仅将字母数字、下划线视为单词组成部分,导致带标点的完整子串无法被匹配——比如调用contains("hello world!", "world!")返回False,反而contains("hello world!", "world")返回True,不符合实际需求。

需求明确

需要实现一种「朴素」的匹配逻辑:子串的开头必须是父字符串的起始位置或空格,子串的结尾必须是父字符串的结束位置或空格。对应上述示例,期望contains("hello world!", "world!")返回True,contains("hello world!", "world")返回False。

实现代码

修改正则规则,直接匹配边界或空格,并对目标子串做转义处理(避免正则特殊字符干扰):

import re

def contains(string, word):
    # 匹配开头为字符串起始/空格、结尾为空格/字符串结束的目标子串
    return bool(re.search(rf"(?:^| ){re.escape(word)}(?: |$)", string))

测试验证

  • contains("hello world!", "world!") → True(符合预期,完整匹配带标点的子串)
  • contains("hello world!", "world") → False(不符合匹配规则,因为world后紧跟!而非空格/字符串结尾)
  • contains("hello", "hello") → True(子串为整个字符串,匹配边界)
  • contains("hi there test", "there") → True(子串前后均为空格,符合规则)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:05:03