如何通过正则表达式验证前后被至少一个空格包裹的指定字符串
正则匹配方案
正确正则写法
根据你要求的「目标字符串前后必须被至少1个空格包裹」的规则,分两种场景提供正则实现:
- 严格匹配(目标出现在整串首尾时不命中,匹配结果仅包含目标内容不包含前后空格)
用零宽断言实现,不会捕获前后的空格,不影响后续字符串切割拼接逻辑:r'(?<=\s)(?:pal1|pal2|pal)(?=\s)' - 兼容场景(允许目标前是整串开头、目标后是整串结尾)
如果你需要匹配整串开头或结尾的目标内容,调整为:r'(?<=^|\s)(?:pal1|pal2|pal)(?=\s|$)'
原正则错误说明
你原有写法不符合要求的核心原因:
\s*代表匹配0个或多个空格,因此目标前后没有空格时也会命中,不符合你的规则- 多余的
\¿?、\??会额外匹配前后的倒问号、问号,如果你没有匹配这类符号的需求可直接删除 - 代码中的
regex_tag属于笔误,你定义的正则变量名为regex,需要对应修改
修复后完整代码
import re input_text_l = "hjahsdjhas pal sahashjas" # 可根据需求替换为上文对应的其他正则 regex = re.compile(r'(?<=\s)(?:pal1|pal2|pal)(?=\s)') if regex.search(input_text_l): not_tag = " ".join(regex.split(input_text_l)) print(not_tag) else: pass
匹配逻辑示意图

内容的提问来源于stack exchange,提问作者user15898019
相关产品推荐
相关产品推荐

