2016-03-22 10 views
0

私は、文字列を取り、プレーンテキストをすべて無視し、数字のリストを返すことができるコードであれば問題を作りたいと思っていますが、問題が発生しています。Pythonでテキストを文字列に変換しますか?

は基本的に、私が変えたい「私は夕食にピザの2つのスライスを食べたい、そして砂漠のためのアイスクリームの1つのスクープ」[2,1](単なる例)に

dummy = dummy.split(" ") 
        j = 0 
        for i in dummy: 
         dummy[j]=i.rstrip("\D") 
         j+=1 
         print(dummy[j-1]) 

は私が試みたものですが、何も削除しませんでした。私はそれがテキストを削除するはずだったと思ったが、リストのために働くように見えないので、rstrip( "\ D")を試した。

私が間違っていたか、これを修正する方法はありますか?

+0

をあなたは正規表現を普通のテキストを混乱させています。 – TigerhawkT3

+0

'\ D'は正規表現で使用されます。 'rstrip'とfamilyは引数として正規表現を取るのではなく、文字列か特別な値' None'(デフォルト)をとります。 – Evert

答えて

2

これは授業のように聞こえるので、これを試してみてください。

  1. 使用str.splitを単語に文を分割します。
  2. str.isdigitを使用して、どの単語がすべて数字であるかを判断します。
  3. 数字のみの単語を整数に変換するには、int()を使用します。
  4. リストを返します。
0

あなたは(TigerhawkT3が観察として、あなたが文字列を正規表現を混同しているように見える場合は、少しあなたが投稿したコードの線に沿って)このためre.splitを使用しますが、より良いあなたの目的のためにre.findallである可能性があります。数字の文字列を実際の整数に変換するのに加えて、intを呼び出すと、そのジョブが実行されます。あなたが正規表現でこれを行うことができ

0

import re 

string = "I want to eat 12 slices of pizza for dinner, and then 1 scoop of ice cream for desert" 
numbers = list(map(int, re.findall(r"\d+", string))) 
print(numbers) 
#[12, 1] 

str.rstrip()方法をあなたが機能しなかった理由ですので、しかし、正規表現を使用していません。これを行うための

0

一つの方法は、これが唯一けれども(e..g「2cmほど」ピックアップされない)のいずれかの側のスペースで区切られた数字を拾うでしょう

dummy = [int(c) for c in dummy.split(" ") if c.isdigit() ] 

ようなものになるだろう。

+0

だから除外=セット(string.punctuation) ダミー= '' .join(除外されていない場合はダミーのch) 先頭に句読記号が付いていても、君は – Dturner

0

re.findall()メソッドは、一致する文字列のリストを作成し、単純なリストの理解度によってそれらをintに変換します。

import re 
dummy = "I want to eat 2 slices of pizza for dinner, and then 1 scoop of ice cream for desert" 

result = [int(d) for d in re.findall(r'\d+', dummy)] 

print(result) 

います:

[2, 1]