2017-05-21 12 views
0

私は言葉がカンマやピリオドで分割されている複数の文字列があります。re.splitをコンマとピリオドに使用するには?

string = ['apple','pear','grapes','carrot','cabbage','veggies','fruit','yard'] 

私だけのための一つの条件を使用する方法を知っている:私は分割したい

string = ['apple,pear,grapes,carrot.cabbage,veggies.fruit,yard'] 

をコンマとピリオドに基づいて、この再分割:

re.split(',',string) 

これは、ピリオドを含む単語を分割しません。カンマやピリオドがあると単語が分割されるように、文字列全体を分割するにはどうすればよいですか?変更オペレータ|を用い

+1

分割パラメータが正規表現です。 'r" [。、] "を使用してください。 – jtbandes

答えて

1
>>> import re 
>>> string = 'apple,pear,grapes,carrot.cabbage,veggies.fruit,yard' 
>>> re.split(',|\.',string) 
['apple', 'pear', 'grapes', 'carrot', 'cabbage', 'veggies', 'fruit', 'yard'] 

これは(\.ようにエスケープされなければならない),又は.のいずれかに分割します。

また、文字クラスを書くことができます。

>>> re.split('[,.]',string) 
['apple', 'pear', 'grapes', 'carrot', 'cabbage', 'veggies', 'fruit', 'yard'] 

しかし、どちらの文字は、フレーズで置換することができるので、これはあまり一般的です。

['apple', 'pear', 'grapes', 'carrot.cabbage', 'veggies.fruit', 'yard'] 

そして、あなたが変更することができます:あなたは

from itertools import chain 

string = ['apple,pear,grapes,carrot.cabbage,veggies.fruit,yard'] 
final = list(chain.from_iterable(re.split(',', k) for k in string)) 
print(final) 

出力変数あなたの文字列内の多くの要素を持っている場合

+0

また、文字クラス –

+0

を使用することもできます。_ [、。] _では、エスケープする必要はありません。また、1文字の選択では大括弧が優先されます。 – volcano

0
import re 
string = 'apple,pear,grapes,carrot.cabbage,veggies.fruit,yard' 
arr = re.split('[,.]', string) 
print(arr) 
+0

文字クラスでピリオドをエスケープする必要はありません –

+0

あなたはそうです、修正しました。 – user3429660

0

あなたは、あなたのリストを処理するために、itertoolsモジュールからchain.from_iterableを使用することができますパターン内のみre.split()',''.'の間で分割する:

from itertools import chain 

string = ['apple,pear,grapes,carrot.cabbage,veggies.fruit,yard'] 
final = list(chain.from_iterable(re.split('[,.]', k) for k in string)) 
print(final) 

出力:

['apple', 'pear', 'grapes', 'carrot', 'cabbage', 'veggies', 'fruit', 'yard'] 
関連する問題