2014-01-18 19 views
6

複数の区切り文字を含む文字列を分割したいが、結果のリストに区切り文字を残しておきたい。これは、あらゆる種類の数式を解析する最初のステップを実行するのに便利なことだと思います。素晴らしいPythonソリューションがあると思われます。Python:文字列分割に区切り文字を含めるにはどうすればいいですか?

誰かがJavaで同様の質問をしましたhere。例えば

は、典型的な分割は次のようになります。

>>> s='(twoplusthree)plusfour' 
>>> s.split(f, 'plus') 
['(two', 'three)', 'four'] 

しかし、私は後ろにプラスを追加するための良い方法を探しています(またはそれを保持):最終的に

['(two', 'plus', 'three)', 'plus', 'four'] 

私は各オペレータとブラケットのためにこれをしたいと思いますので、入手する方法があれば

['(', 'two', 'plus', 'three', ')', 'plus', 'four'] 

l良い。

答えて

11

これは、Pythonのreモジュールで行うことができます。

import re 
s='(twoplusthree)plusfour' 
list(filter(None, re.split(r"(plus|[()])", s))) 

イテレータのみが必要な場合は、リストから除外できます。

4
import re 
s = '(twoplusthree)plusfour' 
l = re.split(r"(plus|\(|\))", s) 
a = [x for x in l if x != ''] 
print a 

出力:ここ

['(', 'two', 'plus', 'three', ')', 'plus', 'four'] 
3

re.splitを使用して簡単な方法です:

import re 

s = '(twoplusthree)plusfour' 
re.split('(plus)', s) 

出力:

['(two', 'plus', 'three)', 'plus', 'four'] 

re.splitは、string.splitによく似ていますが、リテラル区切り記号の代わりに正規表現パターンを渡す点が異なります。ここでのトリックはパターンの周りに()を入れてグループとして抽出することです。

あなたは空の文字列があるでしょう区切りパターン

0

の二つの連続occurrenciesがある場合、このスレッドは古いですが、そのトップのGoogleの結果ので、私はこれを追加することを考え念頭に置いてクマ:

場合正規表現を使用したくない場合は、正規表現を実行する簡単な方法があります。基本的には分割を呼び出すだけですが、最後のトークンを除いてセパレータを戻します。

def split_keep_deli(string_to_split, deli): 
    result_list = [] 
    tokens = string_to_split.split(deli) 
    for i in xrange(len(tokens) - 1): 
     result_list.append(tokens[i] + deli) 
    result_list.append(tokens[len(tokens)-1]) 
    return result_list 
関連する問題