2017-11-20 10 views
-5

私は新しいatt regexであり、文字列の中に2つの数字(時には10進数で)を見つけようとしています。文字列は、このようなものになります。文字列の中の数字を検索する - Regex Python

を "ジョンJohnssonは23ポンド(15)のために家を買った"

"ジョンJohnssonは8ポンド(11)のために家を買った"

「ベンBurtsonを買いました144.5ポンドのための家(101.5)」

"ISACベンソンは132.5ポンド(90)"

"ISACベンソンが一緒にベンと330ポンド(110.25)用の2軒の家を買った"

のために家を買いました

は私が

[23、15]

[144.5、101.5]

[132.5を抽出したい

(何文字列の間に共通する "NUMポンド(NUM)" です) 、90]

[330、110.25]

はあなたの助けをありがとう! DoddelCode

+4

あなたは、このための正規表現を考え出すの試みを作ったことがありますか?キャプチャグループの使用に精通していますか? –

+0

ここ8/11は一致しません。 – PJProudhon

答えて

0
(\d+(?:\.\d+)?) pounds \((\d+(?\:.\d+)?)\) 

search、グループ1は "ポンド" の前に数で、グループ2は、内数であります角かっこ。

>>> match = re.search(r"(\d+(?:\.\d+)?) pounds \((\d+(?:\.\d+)?)\)", "John Johnsson bought a house for 23 pounds (15)") 
>>> match.group(1) 
'23' 
>>> match.group(2) 
'15' 

説明:

\d+(?:\.\d+)? 

はあなたが指定した形式で番号と一致します。 (?:)は非キャプチャグループです。他のすべてはかなり自明です。

は、ここでそれを試してみてください:https://regex101.com/r/G8gfzj/2

+0

これらの点をエスケープする必要があります: '\。\ d +' –

+0

ありがとうございました!これは私が探しているコードのようです...自分でこれを見つけようと時間をかけました... 5分後、私は彼女に質問しました。 – DoddelCode

1

あなたはこれを試すことができます。

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']] 
+0

私は彼が明確に "num pounds(num)"という形式の抜粋を書いていると思います。 –

+0

数字が1桁だけの場合、これは機能しません。 – Sweeper

関連する問題