あなたはこれを試すことができます。
import re
s = ["John Johnsson bought a house for 23 pounds (15)", "Ben Burtson bought a house for 144.5 pounds (101.5)", "Isac Benson bought a house for 132.5 pounds (90)", "Isac Benson bought a 2 houses for 330 pounds (110.25) together with Ben"]
final_data = [re.findall('\d+\.*\d+', i) for i in s]
出力:
[['23', '15'], ['144.5', '101.5'], ['132.5', '90'], ['330', '110.25']]
値をキャストするのいずれかに浮かぶかの整数:
new_data = [[int(b) if re.findall('^\d+$', b) else float(b) for b in i if b] for i in final_data]
出力:
[[23, 15], [144.5, 101.5], [132.5, 90], [330, 110.25]]
編集:より堅牢なソリューション:
import re
s = ["John Johnsson bought a house for 23 pounds (15)", "Ben Burtson bought a house for 144.5 pounds (101.5)", "Isac Benson bought a house for 132.5 pounds (90)", "Isac Benson bought a 2 houses for 330 pounds (110.25) together with Ben"]
new_s = [re.findall('\s(\d+\.*\d+)\spounds\s\((\d+\.*\d+)\)', i) for i in s]
final_s = [list(i[0]) for i in new_s if i]
出力:これで
[['23', '15'], ['144.5', '101.5'], ['132.5', '90'], ['330', '110.25']]
あなたは、このための正規表現を考え出すの試みを作ったことがありますか?キャプチャグループの使用に精通していますか? –
ここ8/11は一致しません。 – PJProudhon