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

如何实现按空格分割字符串但保留单引号内空格?正则求助

解决单引号内空格不分割的字符串拆分问题

这里提供两种可行方案,不管你偏好正则还是手动实现都能满足需求:

方案一:正则表达式实现

虽然你说不擅长正则,但这个模式其实很好理解,用re.findall就能直接匹配出目标片段:

import re

input_str = "A B C ' '"
# 匹配单引号包裹的内容或非空白字符序列
matches = re.findall(r"'[^']*'|\S+", input_str)
# 去掉每个匹配结果的首尾单引号
result = [item.strip("'") for item in matches]
print(result)  # 输出: ['A', 'B', 'C', ' ']

正则说明

  • '[^']*':匹配以单引号开头,中间包含任意非单引号字符(包括空格),直到闭合单引号的片段
  • |\S+:当不满足上面的匹配时,匹配一个或多个连续的非空白字符(也就是引号外的普通单词)
  • 最后用strip("'")去掉单引号,得到你想要的结果

方案二:手动遍历字符串实现

如果不想碰正则,手动遍历字符的方式更直观,逻辑清晰:

input_str = "A B C ' '"
result = []
current_segment = []
inside_quotes = False

for char in input_str:
    # 遇到单引号,切换是否在引号内的状态
    if char == "'":
        inside_quotes = not inside_quotes
    # 遇到空格且不在引号内,就把当前片段加入结果
    elif char == " " and not inside_quotes:
        if current_segment:
            result.append(''.join(current_segment))
            current_segment = []
    # 其他字符(包括引号内的空格)都加入当前片段
    else:
        current_segment.append(char)

# 处理最后一个未加入的片段
if current_segment:
    result.append(''.join(current_segment))

print(result)  # 输出: ['A', 'B', 'C', ' ']

逻辑说明

  • 用inside_quotes标记当前是否处于单引号内部
  • 遍历每个字符时,只有当不在引号内且遇到空格时,才拆分当前片段
  • 引号内的空格会被当作普通字符加入当前片段,不会触发拆分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:05:34