数据硝基和正则expression式(Python)
我在MS Excel 2010中有这个专栏,里面有'邮政编码'和'email-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的重新模块。
import re for i in range(1, 9): Cell(i, 4).value = re.findall(r'\d+', Cell(i, 1).value) #storing result in column4
我跑在这个列的正则expression式,我得到了这个结果:
[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']
如何将结果提取到人类可读的邮政编码表格中?
以下正则expression式将匹配每个string并将邮政编码提取为组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)
为什么你不能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']
只是在DataNitro上针对您的原始问题做出附加注释。
像这样做了很多的DataNitro loopinfg,整个列中最有效的阅读方式是:
l = Cell("A1").vertical # returns a list of all values starting in A1 going down to 1st blank cell
结合@ cyber的解决scheme两class轮将给你你的答案:
l = Cell("A1").vertical [entry.split()[0] for entry in l]
或者如果你喜欢正则expression式的灵活性Johnathan Benn回答becomomes:
l = Cell("A1").vertical [re.compile(r'([\d\-]+)\s+[\w@\.]+').findall(entry) for entry in l]
- TCL_REGEXP ::如何使用TCL正则expression式从variables中search5个不同的单词。 如何发送输出到Excel表格的每一列?
- 模式匹配计数在Excel中(正则expression式和VBA)
- Excel VBA中的正则expression式
- 从S3下载xlsx并parsing它
- 正则expression式VBA Excel查找单元格内的模式
- 如何将一列中的值应用于过滤数据中的另一列
- 使用RegEx在VBA中分割string
- 如何在Excel / Word / Notepad ++中每五行插入一个换行符?
- 使用正则expression式检查文件扩展名 – application / vnd.ms-excel