2016-09-27 8 views
2

str.split"print 'Hello, world!' times 3"で使用すると、リスト["print", "'Hello,", "world!'", "times", "3"]が返されます。しかし、結果は["print", "'Hello, world!'", "times", "3"]です。どうやってやるの?文字列リテラルを含むトークンライン

+2

* "これは望ましい結果ではないことは明らかです" * - おそらく、あなたに。あなたがしていることすべてがスペースで分かれていると仮定して、私にはうまく見えます。それはセットであり、リストではないので、注文は保証されません。 – jonrsharpe

+0

Regexがあなたの鍵です –

+1

@NeilGatenby申し訳ありません、 'foo.split()'を意味します... Pythonの新機能で、まだ関数を記憶しています:) –

答えて

1

この正規表現は、必要な場合は引用符を取得します。

import re 

s = "print 'hello, world!' 3 times" 
re.findall(r'(\w+|\'.+\')',s) 
+0

この変更は必要ありません。それは完全に働いた。どうもありがとうございました :) –

3

あなたがを分割のうち、引用符内の単語を除外するつもりなら、あなたはshlex.splitを使用することができます。

import shlex 

s = "print 'Hello, world!' times 3" 
print(shlex.split(s)) 
# ['print', 'Hello, world!', 'times', '3'] 
+2

私は一重引用符を保持してstr.split( "'")を提案しようとしていましたが、まだもっと多くの作業が残っています...しかし、これはより良く見えます –

+0

うわー、非常に便利な機能!これは簡単に変更することができます(sが '' '' '+ s +' "'を含む場合)の行に沿って単純なもので引用符を再追加することができます。ありがとう! –

0

.split()機能は、区切り文字に基づいてstrを分割します。デフォルトの区切り文字はblank spaceです。あなたの文字列内の'は気にしません。場合は、'内の単語を1つの単語として扱いたい場合。 shlexライブラリを使用しているか、regexという表現を書く必要があります。確かに、split()はあなたが探しているものではありません。

関連する問題