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は、可能であったとしても、不必要に複雑です。

2 つの違いを実際に確認するには、いつでもSource を使用できます、Luke :

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

これらのファイルをお気に入りのエディターで開いて調べてみると、動作がまったく異なることがわかります。

于 2016-01-08T14:44:11.570 に答える