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

Python实现给字符串中多词短语添加引号(含括号场景)

给布尔查询中的多词短语自动添加双引号的正则方案

问题说明

需要将包含布尔运算符(AND/OR)和括号的查询字符串,如 jon doe AND (james OR james david),转换为给所有多词短语包裹双引号的格式:"jon doe" AND (james OR "james david")。非正则方法无法适配带括号的嵌套场景,这里提供简洁的正则实现方案。

正则实现思路

核心是匹配非布尔运算符、由多个空格分隔单词组成的连续字符序列,同时自动忽略括号的嵌套结构,无需额外处理括号逻辑。

代码实现(Python)

import re

def wrap_multi_word_phrases(query):
    # 正则规则:匹配至少两个单词组成的短语,排除AND/OR运算符
    regex_pattern = r'\b(?!AND\b|OR\b)([a-zA-Z]+(?:\s+[a-zA-Z]+)+)\b'
    return re.sub(regex_pattern, r'"\1"', query)

# 测试示例
raw_query = 'jon doe AND (james OR james david)'
formatted_query = wrap_multi_word_phrases(raw_query)
print(formatted_query)  # 输出:"jon doe" AND (james OR "james david")

正则规则解释

  • \b:单词边界,确保匹配的是完整的单词序列,避免部分匹配运算符或短语
  • (?!AND\b|OR\b):负向预查,排除单独的AND/OR运算符,防止误包裹
  • ([a-zA-Z]+(?:\s+[a-zA-Z]+)+):捕获多词短语,(?:...)是非捕获组,用于匹配后续的空格+单词结构,确保至少有两个单词
  • \b:结尾的单词边界,确保短语完整闭合

扩展适配

如果查询中包含数字、连字符等特殊字符,可调整正则的字符类,例如将 [a-zA-Z] 替换为 [a-zA-Z0-9-],适配更多场景:

regex_pattern = r'\b(?!AND\b|OR\b)([a-zA-Z0-9-]+(?:\s+[a-zA-Z0-9-]+)+)\b'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:50:47