Python 先頭にいくつかある半角数字だけ削除したい

#python

やりたいこと

先頭についている半角数字だけ削除したいです。

'123456789' ⇒ '456789'

動作環境

Google Colaboratory

>Googleが提供しているJupyter Notebookのようにブラウザ上でPythonを記述・実行できる環境のこと。

無料だし、開発環境整える必要ないし、GPU環境でディープラーニングや機械学習が実装できるという素晴らしいツールです。

方法

#正規表現操作のライブラリ
import re

#対象の文字列
target_str = '123456789'

#先頭の半角数字を置換
re_str = re.sub('^[0-9]*','',target_str)

print(target_str," ->> ",re_str)    # 123456789  ->>  456789

解説

Pythonで文字列の置換といえば replace() か re.sub() です。

今回使いませんでしたが、replace()では第一引数に置換元文字列、第二引数に置換先文字列、第三引数に置換回数(省略可)を入れます。

target_str = '123123123123'

replace_str = target_str.replace( '123' , '' , 1 )

print(replace_str)   #123123123

今回のように、頭にいくつ半角数字がついているかわからない場合、置換回数を明記することができません。
そのため、正規表現を使ってより複雑な置換ができるre.sub()を使いました。

re.sub()の使い方は以下の通り。

#正規表現操作のライブラリ
import re

re.sub(正規表現パターン, 置換後文字列, 置換したい文字列)

今回つかったパターン『^[0-9]*』を分解してみると・・・

^ :先頭

[0-9] :半角数字(0,1,2,3,4,5,6,7,8,9)

* :0回以上の繰り返し

つまり、『先頭から0回以上繰り返される半角数字』という意味になります。

注意していただきたいのが、任意の数字が取れる「\d」を使うと、全角・半角どちらの数字にもマッチしてしまうということです。

正規表現パターンの設定がなかなか難しいのですが、分かりやすいpythonの正規表現の例がとってもわかりやすいのでおススメです!

正規表現の参照リスト

文字 説明 マッチする マッチしない
\d 任意の数字      
\D 任意の数字以外      
\s 任意の空白文字      
\S 任意の空白文字以外      
\w 任意の英数字      
\W 任意の英数字以外      
\A 文字列の先頭      
\Z 文字列の末尾      
. 任意の一文字 a.c abc, acc, aac abbc, accc
^ 文字列の先頭 ^abc abcdef defabc
$ 文字列の末尾 abc$ defabc abcdef
* 0回以上の繰り返し ab* a, ab, abb, abbb aa, bb
+ 1回以上の繰り返し ab+ ab, abb, abbb a, aa, bb
? 0回または1回 ab? a, ab abb
{m} m回の繰り返し a{3} aaa a, aa, aaaa
{m,n} m〜n回の繰り返し a{2, 4} aa, aaa, aaaa a, aaaaa
[] 集合 [a-c] a, b, c d, e, f
縦線 和集合(または) a縦線b a, b c, d
() グループ化 (abc)+ abc, abcabc a, ab, abcd

以上、オープンレポートでした

技術的なことで調べたり勉強したことを残していきます。日報をブログでやってみています
きっとゆるめに脱線することもあると思いますが、ゆるめに見守っていただければと思います。


参考にさせてもらったみんなのアウトプットに最大限のリスペクトと感謝を。
そして、この記事が誰かの役に立つことを願って

1

この記事を書いたのは

stsushima

2歳男の子のママです。自然言語処理、Python、GASに興味があります。 時短勤務中

合わせて読みたい