2016-04-29 11 views
2

文字列がaであるとします。 aの一部はac5:9qr$28c#のように見えます。 このパターン(value1:value2 $ value3#)が繰り返されます。繰り返し文字列部分の間の値

ここで私の質問です:これらの値を探して抽出するにはどうすればいいですか?

注:これらの文字列部分は、必ずしも特殊文字である必要はありません。

このような何かを行う必要があります
+1

は '常に区切りです:'、 '$'、と '#'、そのためには?値は常に3文字ですか? –

+0

はい、いいえ。これは常に値です:値$値#値:値$値#... ':'、 '$'、 '#'はここで繰り返す唯一のものです。値の長さは常に異なります。 –

+1

're.findall'で正規表現を使用します。 – Barmar

答えて

1

re.findallはこの問題でうまくいきます。

これを試してみてください:

import re 

data = 'abc:def$ghi#ac5:9qr$28c#1234:4567$89#' 
result = re.findall(r'(.*?):(.*?)\$(.*?)#', data) 
print result 

結果:

[('abc', 'def', 'ghi'), ('ac5', '9qr', '28c'), ('1234', '4567', '89')] 
+0

"スプリッタ"はマルチキャラクタにできますか? '#$'のように。 –

+1

はい。例: 'r '(。*?):!(。*?)\ $ @(。*?)##''は文字列 ''abc:!def $ @ ghi ##''にマッチします。 –

0

a = "ac5:9qr$28c#" 

values = [] 
delimiters = [':','$','#'] 

while len(a) > 0: 
    for delimiter in delimiters: 
     delimiterIndex = a.index(delimiter) 
     newValue = a[0:delimiterIndex] 
     values.append(newValue) 
     a = a[delimiterIndex+1:] 

print values 

出力は次のようになります。もちろん

['ac5', '9qr', '28c'] 

あなたは、元のを維持するために似たような '' 文字列を実装することができます。

関連する問題