2017-06-08 8 views
0

それぞれに1年とテキストが含まれる複数の文字列があります。 1つの文字列の例は、"The year is 2004"です。しかし、別の文字列は次のようになります"this was made in 2003.5"。このように多くの文字列をチェックして正しい数字を抽出するにはどうすればよいですか?文字列を検索して異なる種類の数字を検索する方法

+5

最初に "正しい"番号とみなすものを定義してください。 4桁の数字?範囲内の任意の4桁の数字(1900,2100)?他に何か? –

答えて

0

あなたはここにregexを使用することができます。

>>> str = "The year is 2004" 
>>> re.findall(r"[-+]?\d*\.\d+|\d+", str) 
['2004'] 

>>> str = "this was made in 2003.5" 
>>> re.findall(r"[-+]?\d*\.\d+|\d+", str) 
['2003.5'] 
0

あなたは正規表現を使用することができます。

>>> re.findall(r'\d+(?:\.\d+)?', 'year is 2004') 
['2004'] 
>>> re.findall(r'\d+(?:\.\d+)?', 'this was made in 2003.5') 
['2003.5'] 

あなたが「正しい」数のあなたの定義に合うように調整するに正規表現を微ことができます。例えば、これは、指定された文字列内のすべての数値が得られます。数字のあなたのタイプの

+0

あなたの解決策では、これは私にre.findall(r '\ d +(?:\ d \)+?)、1年目は2004年です) '[' 1 '、' 2004 ']' – SRC

+1

はい、 OPが望んでいるものは明確ではないので、これは一つの可能​​性です。あなたが1を望んでいなければ、正規表現を '\ b \ d +(?:\。\ d +)?\ b'に変更することができますが、OP問題の正確な要件を知らなくても正確な正規表現を与えることはできません。 –

0

も動作します:

def find_number(my_string): 
    for element in my_string.split(): 
     try: 
      return int(element) 
     except ValueError: 
      try: 
       return float(element) 
      except ValueError: 
       pass 
my_string = "The year is 2004" 
number = find_number(my_string) 

これはあなたの両方の例については、右の出力が得られます。

0

リストの内包を使用し、他の人が何であるかを知らなくても、前述のように正規表現

def convert(e): 
    try: 
     return float(e) 
    except: 
     return None 

str = "the 1st year is 2004" 
m = [e for e in str.split(" ") if len(e) >= 4 and convert(e)] 
print m 
>>> ['2004'] 

を使用していない「正しい」の数は、すべてのユースケースに合った答えを与えることは困難です。しかし、私はここで正しい数字は4桁以上の長さであると仮定しました

関連する問題