2

MS Excel 2010 にこの列があります。これには、「郵便番号」と「メール ID」の組み合わせがあります。

この列からこれらの郵便番号(20530、90012-3308 など)を抽出しようとしています。

    20530 mark@ucvxcx.gov
    20530 kidafd@gmail.com
    20530 vladfeodsaf@usdodfaadj.govv
    20530 syadfadsbil.vvbvx@vnvnvn.gov
    20004 safdbnvis9dfg@infdda.gov
    20530 vhlhsdlf8dlfha@vbvbcxbUI.GOV
    90012-3308  h.james@asdfad.gov
    90012-3308  madsfl.hjlkdjd@pkdoi.gov
    90012 mark.fraser@ruskgb.zx

Python の re モジュールを試してみました。

import re


for i in range(1, 9):
     Cell(i, 4).value = re.findall(r'\d+', Cell(i, 1).value) #storing result in column4

その列で正規表現を実行したところ、次の結果が得られました。

[u'20530']
[u'20530']
[u'20530']
[u'20530']
[u'20004', u'9']
[u'20530', u'8']
[u'90012', u'3308']
[u'90012', u'3308']
[u'90012']

結果を人間が読める郵便番号形式に抽出するにはどうすればよいですか?

4

3 に答える 3

6

なぜできないのですsplitか?

>>> '20530 mark@ucvxcx.gov'.split()
['20530', 'mark@ucvxcx.gov']

次に、最初の要素を取得します。

>>> '20530 mark@ucvxcx.gov'.split()[0]
'20530'

すべてのデータについて:

l = ['20530 mark@ucvxcx.gov',
     '20530 kidafd@gmail.com',
     '20530 vladfeodsaf@usdodfaadj.gov',
     '20530 syadfadsbil.vvbvx@vnvnvn.gov',
     '20004 safdbnvis9dfg@infdda.gov',
     '20530 vhlhsdlf8dlfha@vbvbcxbUI.GOV',
     '90012-3308  h.james@asdfad.gov',
     '90012-3308  madsfl.hjlkdjd@pkdoi.gov',
     '90012 mark.fraser@ruskgb.zx']

[entry.split()[0] for entry in l]

結果

['20530', '20530', '20530', '20530', '20004', '20530', '90012-3308', '90012-3308', '90012']
于 2014-05-15T19:03:47.177 に答える
2

次の正規表現は、各文字列に一致し、グループ 1 として郵便番号を抽出します。

([\d\-]+)\s+[\w@\.]+

すべての郵便番号を一度に抽出する Python コードを次に示します。

import re
text = r'''    20530 mark@ucvxcx.gov
    20530 kidafd@gmail.com
    20530 vladfeodsaf@usdodfaadj.govv
    20530 syadfadsbil.vvbvx@vnvnvn.gov
    20004 safdbnvis9dfg@infdda.gov
    20530 vhlhsdlf8dlfha@vbvbcxbUI.GOV
    90012-3308  h.james@asdfad.gov
    90012-3308  madsfl.hjlkdjd@pkdoi.gov
    90012 mark.fraser@ruskgb.zx'''
re.compile(r'([\d\-]+)\s+[\w@\.]+').findall(text)
于 2014-05-15T19:05:50.503 に答える