如何实现按空格分割字符串但保留单引号内空格?正则求助
解决单引号内空格不分割的字符串拆分问题
这里提供两种可行方案,不管你偏好正则还是手动实现都能满足需求:
方案一:正则表达式实现
虽然你说不擅长正则,但这个模式其实很好理解,用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
相关产品推荐
相关产品推荐

