文字列がa
であるとします。 a
の一部はac5:9qr$28c#
のように見えます。 このパターン(value1:value2 $ value3#)が繰り返されます。繰り返し文字列部分の間の値
ここで私の質問です:これらの値を探して抽出するにはどうすればいいですか?
注:これらの文字列部分は、必ずしも特殊文字である必要はありません。
このような何かを行う必要があります文字列がa
であるとします。 a
の一部はac5:9qr$28c#
のように見えます。 このパターン(value1:value2 $ value3#)が繰り返されます。繰り返し文字列部分の間の値
ここで私の質問です:これらの値を探して抽出するにはどうすればいいですか?
注:これらの文字列部分は、必ずしも特殊文字である必要はありません。
このような何かを行う必要があります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')]
"スプリッタ"はマルチキャラクタにできますか? '#$'のように。 –
はい。例: 'r '(。*?):!(。*?)\ $ @(。*?)##''は文字列 ''abc:!def $ @ ghi ##''にマッチします。 –
:
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']
あなたは、元のを維持するために似たような '' 文字列を実装することができます。
は '常に区切りです:'、 '$'、と '#'、そのためには?値は常に3文字ですか? –
はい、いいえ。これは常に値です:値$値#値:値$値#... ':'、 '$'、 '#'はここで繰り返す唯一のものです。値の長さは常に異なります。 –
're.findall'で正規表現を使用します。 – Barmar