2017-01-09 7 views
0

まず、私は漠然とした質問のフレーミングをお詫びします。私はこの質問を何と呼ぶべきかを理解できませんでした。私はまた解決を見つけることを試みる多くGoogleを捜したが、私は結論に来なかった。Pythonでの継続番号の検索

私は現在、15-5.{123434}.15-18.のような数字の文字列を持っています。私は文字列を繰り返し処理したいので、中括弧を開くとすぐに閉じた中括弧に遭遇する前にすべての数値を取り、変数に入れたいと思います。私はこれを行う方法を考えました:

string = '15-5.{123434}.15-18.' 
result = "" 

for index, letter in enumerate(string): # For every letter with it's index, 
    if letter == '{': # If letter is '{', 
     for number in string[index:]: # Start a loop from that index, 
      if number =='}': # If number becomes '}', 
       break 
      result += number #Else append the number in the result string. 

しかし、私はこれを行うより良い方法があるのだろうかと思っていました。私はすべての答えに感謝します。ありがとうございました!

 
System: Windows 10, 32bit 
Python version: 3.6.0 
+2

正規表現を使用していますか? –

+0

あなたは正規表現に慣れていますか?彼らはこれを些細な問題にしています。 –

+0

私はregexを使うことを考えていましたが、よく分からず、re.search()、re.match()または他の適切なオプションを使うべきかどうかわかりません。 – Frixoe

答えて

4

これは私が正規表現をお勧めします数回の一つである:もちろん

In [27]: for i in re.findall("\{\d+\}", '15-5.{123434}.15-18.'): print(i[1:-1]) 
123434 

を、あなたはそれを自分で解析する機能を書くことができます:

def getNums(s): 
    answer = [] 
    curr = [] 
    acc = False 
    for char in s: 
     if char == "{": 
      acc = True 
      continue 
     if char == "}": 
      acc = False 
      answer.append(''.join(curr)) 
      acc = False 
      continue 
     if acc: 
      curr.append(char) 
+0

ああ!私は正規表現のそれで解決できると思ったが、どれを使用するか分からなかった、ありがとう!しかし、私はあなたがなぜInのものを使用したのか理解していません – Frixoe

+1

@Frixoe: 'In'は私のpython端末です。それについて心配しないでください:) – inspectorG4dget

+1

@Frixoeあなたはそれを無視することができます。それはちょうどpython端末の1つのためのプロンプトです –

1

ノックではありません正規表現ですが、.plit()で別の1行を見つけたと思います。

[e.split('}')[0] for e in s.split('{') if '}' in e] 

テスト:私たちは書き換えることができます私の答えのリスト内包

を理解するのに十分な、http://treyhunner.com/2015/12/python-list-comprehensions-now-in-color/は非常に基本的で、リストの内包表記上のリストの内包表記で利用可能な情報の

多くを展開するを編集し

ss = ['','{}','{0}','1','{0}1','1{0}','{0}{2}','{0}1{2}','{0}1{2}3']      

for s in ss:      
    print(s,[e.split('}')[0] for e in s.split('{') if '}' in e]) 
[] 
{} [''] 
{0} ['0'] 
1 [] 
{0}1 ['0'] 
1{0} ['0'] 
{0}{2} ['0', '2'] 
{0}1{2} ['0', '2'] 
{0}1{2}3 ['0', '2'] 

それを読むのに役立つかもしれない部分間の改行での理解:

c = [e.split('}')[0] 
      for e in s.split('{') 
       if '}' in e] 

、我々はループの等価で全体のことを行うことができますと

def in_curly(s):  
    new_list = [] 
    for e in s.split('{'): 
     if '}' in e: 
      new_list.append(e.split('}')[0]) 
    return new_list 

c = in_curly(s) 

は言う:

s ='35{0}17{2}3' 

のいずれかまたは両方上記http://pythontutor.comライブ実行可視化モード

の貫通強化することができます
+0

私はそれをかなり理解していませんでした。申し訳ありませんが、私は比較的理解が難しいので、1ライナーはちょっと混乱しているようです。 – Frixoe

+0

リストの理解を理解する上で少しを追加 – f5r5e5d

+0

ありがとう!私は理解を理解している! :D – Frixoe