2017-02-13 13 views
0

正規表現を使用して分割したい文字列があります。正規表現で分割する

入力:

S1:1- first split begins.s2:1- first split ends.s1:2-second split begins.S2:2-second split ends,S1:3-third split begins.S2:3-third split ends. 

出力:我々は

を分割した表現を含むリストであるべきであるS1 [1-最初の分割が開始されると、S2:1-最初の分割は、S1を終了:2私はこれは私が持っているものですが、それは私の与えたパターン[s/S][1/2]:[0-9][0-9]
に分割したい3 - 第三分割始まり.....]

:2秒の分割が終了し、S1は: - セカンドスプリットは、S2を開始します私は分割した正規表現を削除します。

import re 
text="""S1:1- first Split begins.continue the sentence 
     s2:1- first split ends 
     s1:2-second split begins 
     S2:2-second split ends 
     S1:3-third split begins 
     S2:3-third split ends """ 
output=re.split("[Ss][12]:[0-9]*", text) 
+0

あなたが出力として望むものを追加してくださいすることができます。 –

+0

これを単に '\ n'で分割することを考えてください。' re.split( "\ n"、text) ' – Ibrahim

+0

のように\ nを持つ必要はありません。テキストは1つの大きな文字列にすることができます。 – AMisra

答えて

2

があなたの正規表現を維持するために、これを達成するために正規表現に肯定先読み(?= CODE)を使用してみてください。

\s(?=[sS][12]:[0-9]) 

完全なコード:

import re 
text="""S1:1- first Split begins.continue the sentence 
     s2:1- first split ends 
     s1:2-second split begins 
     S2:2-second split ends 
     S1:3-third split begins 
     S2:3-third split ends """ 
output=re.split("\s(?=[sS][12]:[0-9])", text) 

結果:あなたの正規表現は、このようなものになります

['S1:1- first Split begins.continue the sentence\n ', 's2:1- first split ends\n ', 's1:2-second split begins\n ', 'S2:2-second split ends\n ', 'S1:3-third split begins\n ', 'S2:3-third split ends '] 
2

私はあなたがこの入力を分割したい場所を私は理解して非常にわからないんだけど、あなたは出力に含まれるに分割しているテキストをしたい場合、あなたは、撮影パターンを持っている必要があります:

re.split("([Ss][1-2]:[0-9]-)\s*", text) 

結果:

['', 
'S1:1-', 
'first Split begins.continue the sentence\n  ', 
's2:1-', 
'first split ends\n  ', 
's1:2-', 
'second split begins\n  ', 
'S2:2-', 
'second split ends\n  ', 
'S1:3-', 
'third split begins\n  ', 
'S2:3-', 
'third split ends '] 
+0

はい、私は分割しているテキストを出力に含める必要があります。なぜ出力リストの最初の位置に余分な空白行があるのでしょうか? – AMisra

+1

これはスプリットが動作する方法です。ドキュメントから: "セパレータにグループをキャプチャしていて、文字列の先頭に一致すると、結果は空の文字列で始まります。文字列の末尾も同じです。正直なところ、先読みバリアントを受け入れると、なぜあなたはre.split( "\ n"、text)を使わないのか分かりません。あなたは線を分割するのではなく、むしろテキストを線から外したいと思うようです。 – gregory