Python:正規表現で文字列の先頭の数値だけ取り出したい

Pythonのロゴ Python

Pythonで文字列の先頭の数値のみを取り出す方法。
先頭がマイナスの数値でもプラスの数値でも取り出せるようにしたい。

サンプルスクリプト

# 正規表現モジュールをインポート
import re

# 検索対象文字列
moji = "-5[+2]"

# 先頭が整数にマッチするかどうか?
suti = re.match("^\-[0-9]+|^[0-9]+", moji)

# 先頭が数値なら表示する
if suti != None:
	print(suti.group())		# マッチした文字列を取り出す

実行結果

-5

解説

サンプルでは、re.match関数を利用している。
re.match関数は、「先頭から」という検索条件がある場合に利用できる正規表現関数。(「文字列の中から」という検索条件ならre.searchを使うと良い)

正規表現をつかうためにreモジュールをインポートする

import re

わたしの場合、天気予報サイトをBeautiful Soupでスクレイピングした際、最低気温などの表示文字列でこんな文字列があった。

-5[+2]

必要な部分は、最低気温を表している先頭の -5 の部分なのだが、前日との気温差で [+2] という余計な文字がついている。先頭の -5 のみ取り出したい。

先頭のマイナスも含めた整数を取り出したいので、先頭がマイナスの数値を表す ^-[0-9]+ と先頭がプラスの数値を表す ^[0-9]+ をまたはを表すの | で区切って以下の正規表現の式とした。

suti = re.match("^\-[0-9]+|^[0-9]+", moji)

上記の式は、先頭文字列が数値でない場合、 None を返すため、マッチしたときだけ表示するようにしている。(if文の部分)

またre.matchは、マッチしたとき(この場合整数だった場合)は、文字列そのものを返してくれずマッチオブジェクトを返す。

そのまま print(suti) などとしてしまうと以下のように表示されてしまう。

<re.Match object; span=(0, 2), match='-5'>

マッチした数値部分のみを表示するには、マッチした文字列を取得する group() メソッドを使う。

print(suti.group())

これで先頭の数値を取り出す事ができる。

-5

コメント

タイトルとURLをコピーしました