32

所以我shlex.split()最近曾经将命令拆分为subprocess.Popen()函数的参数。我记得很久以前我还使用re.split()函数来拆分指定特定分隔符的字符串。有人能指出它们之间的本质区别是什么吗?每个功能最适合哪种场景?

4

1 回答 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 回答