質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

4回答

4559閲覧

pythonでの全角の数字の正規表現について

swift_13

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2018/12/13 07:03

前提・実現したいこと

メールの情報を抽出するプログラムを書いてます。
そのメールの中から正規表現を使って電話番号を取り出そうとしているのですが、全角がうまく取り出せません。
半角だと取り出せます。
どうすればよいか教えていただけないでしょうか。

該当のソースコード

python

1line = '(○○警察署 ××××-××-××××)' 2Tell = r'((|()[^(()|())]*([0-90-9]{2,4})(-|ー)([0-90-9]{2,4})(-|ー)([0-90-9]{3,4})()|))' 3matchtel = re.search(pattern.Tell, line)

試したこと

最初はTellの中身を'[0-9]'としていましたが、全角に対応しようと思って'[0-90-9]'に直しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

文字クラスの中の全角数字で問題なく動作します。
全角数字がどうこうという問題ではなくて、別の部分で失敗していると思いますよ。質問中でマッチさせている文字が隠されているので解答はありませんが。

>>> import re >>> p = r'([0-90-9]{2,4})(-|ー)([0-90-9]{2,4})(-|ー)([0-90-9]{3,4})' >>> re.search(p, '電話番号は03ー9999ー9999です') <_sre.SRE_Match object; span=(5, 17), match='03ー9999ー9999'> >>> list(re.search(p, '電話番号は03ー9999ー9999です').groups()) ['03', 'ー', '9999', 'ー', '9999'] >>> list(re.search(p, '電話番号は03ー1234ー5678です').groups()) ['03', 'ー', '1234', 'ー', '5678']

投稿2018/12/13 08:18

quickquip

総合スコア11299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swift_13

2018/12/14 05:29

全角半角の問題ではないことがquiquiさんのおかげで気づくことができました。ありがとうございました。
guest

0

python以外の大抵の言語でも言えますが、半角と全角を同じに見てはいけません。
一端、全角を半角にする関数を利用するといいでしょう。

こちらに詳細が載っていますので、参考がてらにどうぞ。
https://www.python.ambitious-engineer.com/archives/754

投稿2018/12/13 07:52

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swift_13

2018/12/14 05:29

ご協力ありがとうございました。
guest

0

ベストアンサー

「ー」これはカナの長音記号です。
取り出したい文字列に使われているのはハイフン(的な文字)なのでしょう。使われている文字を使ってください。
なおハイフン的な文字には複数あります。
とりあえず抑えておくべきはU+FF0D「-」・U+2010「‐」・U+2015「―」・U+2014「—」くらいかな…。

投稿2018/12/13 12:06

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swift_13

2018/12/14 05:28

ハイフンの種類の問題でした。ありがとうございました。
guest

0

\dなら半角の数値にも全角の数値にもマッチします。
ただ海外の数字にもマッチするので、それを弾きたいなら使えませんが。

\dがマッチする『数字』の一覧は次のページで見られます。
Unicode Characters in the 'Number, Decimal Digit' Category

投稿2018/12/13 07:59

編集2018/12/13 08:02
LouiS0616

総合スコア35676

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swift_13

2018/12/14 05:29

回答していただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問