お世話になっております。Pythonの正規表現を用いてテキスト中の数値を計算したものに置き換えたいと思います。例えば次のようなテストコードを通るようにするのが目的です。
def test_convert_dollars_into_yen(self): rate = 106.73 text = "原油先物6月限は3.5%高の1バレル=17.07ドル。ニューヨーク時間20日の取引では、5月限が一時マイナス40.32ドルを付けていた" expected = "原油先物6月限は3.5%高の1バレル=1821円。ニューヨーク時間20日の取引では、5月限が一時マイナス4303円を付けていた" converted = convert_dollars_into_yen(text, rate) self.assertEqual(expected, converted) def test_convert_dollars_into_yen2(self): rate = 106.73 text = "トランプ米政権と議会指導部は20日、4500億ドル規模の追加の新型コロナウイルス対策を発動する方向で最終調整に入った" expected = "トランプ米政権と議会指導部は20日、48028500000000円規模の追加の新型コロナウイルス対策を発動する方向で最終調整に入った" converted = convert_dollars_into_yen(text, rate) self.assertEqual(expected, converted)
細かい要件は
- 為替レートが1ドル106.73円としてテストを書いています。レートは引数で与えることができます。
- 入力は新聞記事などの普通の日本語です。UnicodeのNFKC正規化や余分なスペースの除去などの前処理は済んでいるものと考えてください。
- テキストの中に何箇所ドル表記があるかは決まっていません。0箇所かも知れませんし、複数あるかも知れません。
- ドル表記は「半角数字ドル」です。整数とは限らず小数もありえます。「$30」のような表記は事前に「30ドル」に正規化されます。
- 「億ドル」のような表記も計算したいと思いますが、疑問点は上記のものと同じです(複数箇所を抜き出して計算して元の位置を置き換えられればこれも実現可能)
やったこと
re.sub()
による置換 => 数値計算ができないmatch.group()
による計算 => ドル表記がいくつあるかわからない場合に使えない
正規表現なのでバージョンはいくつでもよいと思いますが、環境はPython 3.7とさせてください。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/28 11:32 編集
2020/04/29 00:27