1

ロシア/カザフスタンの携帯電話 (+7 9x または +7 7x で始まる) をチェックしたいのですが、reシンタキシスが完全に頭を悩ませています。
そのような形式の数値を受け入れたい:

+7 9XX XXXXXXX 
+7 7XX XXXXXXX 
7 7XX XXXXXXX
7 9XX XXXXXXX
8 9XX XXXXXXX   (8 is domestic replace for country code)
8 7XX XXXXXXX  
9XX XXXXXXX     (9 numbers, no country code!)
7XX XXXXXXX 

それらを形式で保存し7XXXXXXXXXXます(国コード+ 10個の数字、+なし)

私はこれを書きました:
re.search(r'^(\+?79?|\+?77?|89?|87?|9|7)(\d{9})$','+79221234567').groups()

結果を必要な形式で保存するにはどうすればよいですか? 上記の正規表現の結果に適用する別の正規表現を作成する必要がありますか ( re.search('(\d{10})$',result_above))、または 1 つの正規表現でフォーマットされた結果を取得するより良い方法がありますか?

PS: 私の正規表現は数値に対して機能しますが、数値を - または () で入力すると失敗します。それを避けることはできますか?

4

2 に答える 2

1

Google Androidがこのタスクをどのように行っているかを確認すると役立つ場合があります。これは、Google トーク、Facebook、Android などで使用されているものと同じライブラリです。

Android ライブラリ自体は Python ではありませんが、概念は引き継がれています。同じライブラリの並列Python ポートが積極的に維持されています。

Javascript バージョンで遊んで、これがニーズに合っているかどうかを確認できます。

自明ではない電話番号を正規表現で確実に解析しようとするのは困難です。無数の亜種があります。良いライブラリを見つけて使用することをお勧めします。

于 2013-01-14T16:06:17.703 に答える
0

NullUserException と ilya が言ったことから外れて、例を次に示します。

ユーザーから情報を読み込み、数字以外のものを取り除きます:

import re
phone_num = raw_input("Phone number. номер телефона\n)

only_nums = int(''.join(re.findall(r'\d', phone_num)))

7 または 9 の開始条件を確認します。

if only_nums[0] == 7 || only_nums[0] == 9:
  print only_nums
于 2013-01-15T01:38:32.513 に答える