shlex.split() 和 re.split() 有什么区别?
What is the difference between shlex.split() and re.split()?
所以我最近使用 shlex.split()
将命令拆分为 subprocess.Popen()
函数的参数。我记得很久以前我还使用 re.split()
函数来拆分带有指定特定分隔符的字符串。有人可以指出它们之间的本质区别是什么吗?每个功能最适合哪种场景?
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'
在您喜欢的编辑器中打开这些文件并开始四处寻找,您会发现它们的操作方式大不相同。
所以我最近使用 shlex.split()
将命令拆分为 subprocess.Popen()
函数的参数。我记得很久以前我还使用 re.split()
函数来拆分带有指定特定分隔符的字符串。有人可以指出它们之间的本质区别是什么吗?每个功能最适合哪种场景?
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'
在您喜欢的编辑器中打开这些文件并开始四处寻找,您会发现它们的操作方式大不相同。