文字列から数値を抽出し、合計したい


「国語20数学30」から20+30=50を求めたい。データには、このペアが1000件ほど存在します。  
re.matchを使えると思うのですが、どうもうまく行きません。ヒントをご教示頂けるとありがたいです。

reを使わないバージョンですが、現在のところ、下記のように書いているのですが、  
うまく行きません。

[code]

    import pandas as pd 
    import numpy as np
    
    df = pd.DataFrame(
        {'x': ['国語20数学60', '160', '国語100数学20']},
        index=[1, 2, 3])
    
    # index no.2には、国語と数学の合計点が入っています。 
    
    print(df)
    
    df['total'] = np.zeros((len(df),1))  
    lang = list(range(1, 101))  
    math  =list(range(1, 101))  
    for s_lang in lang :
        for s_math in math :
            for i in range(len(df)):
                if ("国語%d数学%d" %(s_lang,s_math)) in df['x'][i]:   
                  df['total'][i] = s_lang+s_math
                else:
                    df['total'][i] =df['x'][i] 
    
    print(df)
    
[/code]




正規表現で数値(の文字列)を抽出し、それをint関数で数値に変えて加算すればよいのではないでしょうか。

正規表現で数値(の文字列)を抽出の部分は、以下のような感じ

[code]

    #正規表現のモジュールをインポートしておく
    import re
    
    #数値にマッチするパターン（0～9の文字(数字)の繰り返し)を定義
    pattern=r'([0-9]*)'
    
    #元の文字列が変数textに入っているものとすると、re.findallを使ってlistsに数値を表す文字列のリストが得られる
    lists=re.findall(pattern,text)
    
[/code]

textの内容が'国語20数学30'だとすると、lists=['20','30']となるはず。

文字列を数値に変えて加算する部分は簡単だと思うので省略。




正規表現で数値(の文字列)を抽出し、それをint関数で数値に変えて加算すればよいのではないでしょうか。

正規表現で数値(の文字列)を抽出の部分は、以下のような感じ

[code]

    #正規表現のモジュールをインポートしておく
    import re
    
    #数値にマッチするパターン（0～9の文字(数字)の繰り返し)を定義
    pattern=r'([0-9]*)'
    
    #元の文字列が変数textに入っているものとすると、re.findallを使ってlistsに数値を表す文字列のリストが得られる
    lists=re.findall(pattern,text)
    
[/code]

textの内容が'国語20数学30'だとすると、lists=['20','30']となるはず。

文字列を数値に変えて加算する部分は簡単だと思うので省略。

