0

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

我正在使用大量代码来执行对我来说似乎是一个小操作 -

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

'Miami 0, New England 28'  

(变量为 home_team、away_team、home_score、away_score)

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

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

4

3 回答 3

4

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

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

例如:

>>> 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']

可以使用 regex 轻松做到这一点——但您要为它的可读性付出代价。

于 2013-02-14T22:39:59.450 回答
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'意思是“没有数字”

于 2013-02-14T23:19:02.023 回答
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')]并将这些值分配给变量。

于 2013-02-14T23:01:11.520 回答