2011-02-07 8 views
0

私はPythonの文字列から数値を分離しようとしています。基本的には、color == 'gray' +数字の場合はその数字を返します。たとえば、色が 'grey23'の場合は23が返されます。色が 'gray'に等しい場合は、else文がトリガーされます。intの文字列を検出できること、Python

擬似コード:

# = an int 

def func (color): 
    if color == 'gray' and a # : 
     return int(#) 
    else: 
     print 'pass' 
+0

これは比較的壊れた考えのようです。タイプエラーやタイプの確認を行わずに、結果に役立つ何かを、なぜ、どのように行うのかを説明してください。 – delnan

答えて

1
if color.startswith("grey") and color[4:].isdigit(): 
    return int(color[4:]) 
else: 
    return 'pass' 

color[4:]は何か、より汎用的な漢でハードコードされた値4を交換しますが、「グレー」のようにすることができた(または「グレー」 - あなたは両方を使用して)これで何ら問題は思えないがハードコードされています。

+1

なぜdownvote?確かに、これを実現するために、単純な組み込み関数を使用することは理にかなっています。 – neil

2

あなたはそのためのregular expressionsを使用することができます:それはエラーが含まれていることができるように

import re 

matches = re.match('\w+(\d+)', color) 
result = matches.groups() 
if(len(result) > 0): 
    return result[0] 
else: 
    return 'pass' 

、テストされていないが、これは基本的な骨子です。

+0

'*'を '\ d 'の後の' + 'に変更します。 –

+0

それは間違っています。 '\ w +'は数字に貪欲に一致するので、 "grey20"の場合、グループ#1は "0"になります。 're.match'は1つのマッチだけを返すので、' None'になる可能性があるので、 'if match:...'でチェックしてください。 OPは色番号を返すので、 'return int(match.group(1))'でなければなりません。 – AndiDog

4
import re 

def func (color): 
    try: 
     return int(re.search('(\d+)$',color).group(0))) 
    except AttributeError: 
     print 'pass' 
関連する問題