You need to enable JavaScript to run this app. Python正则实现按空格分割单词并保留单双引号包裹的短语
优惠活动
大模型
产品
解决方案
定价
更多

Python正则实现按空格分割单词并保留单双引号包裹的短语

Python re模块实现带引号字符串精准解析的落地方案

核心实现逻辑

通过单条正则完成全量文本扫描,自动识别三类有效内容,完全匹配提出的解析规则:

  • 外层包裹双引号的短语:自动剔除首尾双引号,短语内部的单引号、特殊字符全部保留
  • 外层包裹单引号的短语:自动剔除首尾单引号,短语内部的双引号、特殊字符全部保留
  • 无引号包裹的普通单词:自动跳过周围的空白、逗号等分隔符,直接提取原始文本

可直接运行的代码实现

使用re.findall一次性提取所有匹配项,不需要手动逐字符遍历处理引号配对逻辑:

import re

# 待解析的示例字符串
raw_str = 'Hello world "Boston Red Sox", \'Pepperoni Pizza\', "Cheese Pizza\'s", beer'

# 正则匹配模式,搭配(?x)标记忽略注释和冗余空白,方便后续调整
pattern = re.compile(
    r"""(?x)
    "([^"]*)"        # 匹配双引号包裹内容,中间出现的单引号不会打断匹配
    | '([^']*)'      # 匹配单引号包裹内容,中间出现的双引号不会打断匹配
    | ([^\s,"']+)    # 匹配无引号普通单词,自动跳过空白、逗号、引号类分隔符
    """
)

# 遍历所有匹配结果,提取非空的捕获组内容,剔除多余空白
result = [
    item.strip()
    for match in pattern.findall(raw_str)
    for item in match
    if item.strip()
]

# 运行输出与目标列表完全一致
print(result)

代码运行输出结果:
['Hello', 'world', 'Boston Red Sox', 'Pepperoni Pizza', "Cheese Pizza's", 'beer']

常见适配场景调整

  • 若需要支持引号内的转义字符(比如双引号包裹的文本里出现\"表示内部的双引号),可将对应匹配分支修改为"((?:[^"\\]|\\.)*)",就能正确识别转义的引号,不会提前触发闭引号匹配
  • 若需要将逗号也作为有效内容的一部分,可以调整第三分支的排除字符列表,把逗号从排除项里移除即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 10:15:05