ぷろぐら×でざいん

Python 正規表現で小数点以下も取得する

Python 正規表現で小数点以下も取得する

Python 正規表現で小数点以下も取得する

前述

正規表現と本当に慣れるまで、本当に意味がわからなかったですが、慣れると結構使い易いと思うようになりました。仕事柄、メールを解説するのに非常に重宝しています。


小数点以下を取得する

regrex = '\d*[.,]?\d*'

できた。
1. 全ての数字とマッチさせる
2. 「.」 または「,」とマッチさせる
3. 再度数字とマッチさせる


コードを書いてみる

import re


test_data1 = '価格: $23456.123'
test_data2 = '価格: $12345'
p = re.compile('(価格:)\s*(\D+)(\d*[.,]?\d*)')

m1 = p.search(test_data1)
m2 = p.search(test_data2)

print(m1.group(3))
print(m2.group(3))

結果1: 23456.123
結果2: 12345

正規表現のコツ

汎用的に書くのも大事だとは思いますが、取得対象の規模が大きい場合(例えばメールなど)は上記のように取得したい値の前後のキーワードをあえて指定した方が良いと思っています。

何故なら意外と意図しない部分から値を取得してしまい、不具合の原因になることがあるからです。全く同じ正規表現を書くのが憚られる場合は対象キーワードをFormatなどで当て込むことで見通しの良いコードになります。

p1 = re.compile('({})\s*(\D+)(\d*[.,]?\d*)'.format('価格:')
p2 = re.compile('({})\s*(\D+)(\d*[.,]?\d*)'.format('単価:')

もしくは取得したい部分を内包している文章の塊だけをまず変数化し、その変数から値を取得したりもします。まぁー単純に範囲を狭めるやり方です。

 


あとがき

最近やって正規表現と仲良くなれた気がしています。まだまだ使いこなすには至っていませんが、何か新しいチップ的なものがあったら共有していきたいですね。

早々不一

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です