使用shlex.split拆分字符串时带引号子串未完整保留的问题
问题原因
shlex模块默认只识别英文半角引号("和')作为引号分隔符,你用的是中文全角引号(“”),所以shlex不会把它们当作引号来处理,自然会将引号内的空格视为拆分点。
解决方案
有两种可行的处理方式:
方法1:修改shlex的引号识别集合
通过shlex.shlex类自定义引号字符,把中文左右引号加入识别列表:
import shlex target_str = '“COBRA COMMANDER” Section 4Q/C' # 初始化shlex解析器,开启posix模式 lexer = shlex.shlex(target_str, posix=True) # 添加中文引号到识别集合 lexer.quotes = '"' "'" '“' '”' # 解析得到结果 split_result = list(lexer) print(split_result)
运行结果:
['“COBRA COMMANDER”', 'Section', '4Q/C']
方法2:替换中文引号为英文引号
如果不需要保留原有的中文引号,可以先把字符串里的中文引号替换成英文半角引号,再用shlex.split:
import shlex target_str = '“COBRA COMMANDER” Section 4Q/C' # 替换中文引号为英文双引号 converted_str = target_str.replace('“', '"').replace('”', '"') split_result = shlex.split(converted_str) print(split_result)
运行结果:
['COBRA COMMANDER', 'Section', '4Q/C']
内容的提问来源于stack exchange,提问作者easythrees
相关产品推荐
相关产品推荐

