我在MS Excel 2010中有这个专栏 - 它包含'邮政编码'和'电子邮件ID'的组合
我正在尝试从此列中提取这些 zip-codes (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']
如何将结果提取到人类可读的邮政编码表格中?
答案 0 :(得分: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']
答案 1 :(得分: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)
答案 2 :(得分:1)
只是另外一个注释,在DataNitro上回答特定于您的原始问题。
已经完成了大量的DataNitro loopinfg,并且整个列中最有效的阅读方式是:
l = Cell("A1").vertical
# returns a list of all values starting in A1 going down to 1st blank cell
与@ cyber的解决方案相结合,两个班轮将为您提供答案:
l = Cell("A1").vertical
[entry.split()[0] for entry in l]
或者如果你更喜欢正则表达式的灵活性Johnathan Benn回答becomomes:
l = Cell("A1").vertical
[re.compile(r'([\d\-]+)\s+[\w@\.]+').findall(entry) for entry in l]