1. ホーム
  2. python

[解決済み] shlex.split()とre.split()の違いは何ですか?

2022-02-25 03:29:56

質問

そこで、私は shlex.split() を引数として、コマンドを分割するようになりました。 subprocess.Popen() という関数があります。そういえば、昔、私も re.split() 関数は、特定のデリミタを指定して文字列を分割するために使用します。両者の本質的な違いは何なのか、どなたか教えていただけませんか?また、それぞれの関数はどのようなシナリオに最適なのでしょうか?

どのように解決するのですか?

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つの違いを本当に確認するには、常に ソースを使用する、ルーク :

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

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