shlex.split()和re.split()有什么区别?

时间:2016-01-08 14:39:08

标签: python

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

1 个答案:

答案 0 :(得分:22)

shlex.split()designed to work like the shell's split mechanism

这意味着要做一些事情,比如尊重报价等等。

>>> 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一样工作是不必要的复杂,如果它甚至可能的话。

要真正看到两者之间的差异,您可以随时Use the Source, Luke

>>> re.__file__
'/usr/lib/python3.5/re.py'
>>> shlex.__file__
'/usr/lib/python3.5/shlex.py'

在你最喜欢的编辑器中打开这些文件并开始探索,你会发现它们的运作方式完全不同。