Python - 从字符串中提取数字/单词时速度慢

时间:2013-02-14 22:37:30

标签: python regex

Noob在这里尝试通过做一个项目来学习python,因为我从书本上学得不好。

我正在使用一大堆代码来执行我认为是一个小操作 -

我想从以下字符串中提取4个变量

'Miami 0, New England 28'  

(变量是home_team,away_team,home_score,away_score)

我的程序运行速度很慢,我认为可能是这段代码。我想我正在寻找最快捷/最有效的方法。

正则表达式会更快吗?感谢

3 个答案:

答案 0 :(得分:4)

您的文字似乎可以拆分两次。首先是,,然后是空格:

info1,info2 = s.split(',')
home,home_score = info1.rsplit(None,1)
away,away_score = info2.rsplit(None,1)

e.g:

>>> s = 'Miami 0, New England 28'
>>> info1,info2 = s.split(',')
>>> home,home_score = info1.rsplit(None,1)
>>> away,away_score = info2.rsplit(None,1)
>>> print [home,home_score,away,away_score]
['Miami', '0', ' New England', '28']

可以使用正则表达式执行此操作而不会有太多困难 - 但您可以在可读性方面付费。

答案 1 :(得分:0)

如果您确实需要正则表达式:

import re

s='Miami 0, New England 28'
l=re.findall(r'^([^\d]+)\s(\d+)\s*,\s*([^\d]+)\s(\d+)',s)
hm_team,away_team,hm_score,away_score=l[0]

print l

打印[('Miami', '0', 'New England', '28')]并将这些值分配给变量。

答案 2 :(得分:0)

import re

reg = re.compile('\s*(\D+?)\s*(\d+)'
                 '[,;:.#=@\s]*'
                 '(\D+?)\s*(\d+)'
                 '\s*')

for s in ('Miami 0, New England 28',
          'Miami0,New England28  ',
          '  Miami    0   . New England28',
          'Miami 0 ; New England 28',
          'Miami0#New England28  ',
          '  Miami 0   @ New England28'):

    print reg.search(s).groups()

结果

('Miami', '0', 'New England', '28')
('Miami', '0', 'New England', '28')
('Miami', '0', 'New England', '28')
('Miami', '0', 'New England', '28')
('Miami', '0', 'New England', '28')
('Miami', '0', 'New England', '28')

'\D'表示'无数字'