所以我shlex.split()
最近曾经将命令拆分为subprocess.Popen()
函数的参数。我记得很久以前我还使用re.split()
函数来拆分指定特定分隔符的字符串。有人能指出它们之间的本质区别是什么吗?每个功能最适合哪种场景?
问问题
23364 次
1 回答
60
shlex.split()
旨在像外壳的拆分机制一样工作。
这意味着做一些事情,比如尊重引号等。
>>> shlex.split("this is 'my string' that --has=arguments -or=something")
['this', 'is', 'my string', 'that', '--has=arguments', '-or=something']
re.split()
只会根据您定义的任何模式进行拆分。
>>> re.split('\s', "this is 'my string' that --has=arguments -or=something")
['this', 'is', "'my", "string'", 'that', '--has=arguments', '-or=something']
如果可能的话,尝试定义自己的正则表达式来工作shlex.split
是不必要的复杂。
要真正了解两者之间的差异,您始终可以使用源,卢克:
>>> re.__file__
'/usr/lib/python3.5/re.py'
>>> shlex.__file__
'/usr/lib/python3.5/shlex.py'
在您喜欢的编辑器中打开这些文件并开始四处寻找,您会发现它们的操作方式截然不同。
于 2016-01-08T14:44:11.570 回答