Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—从字符串中提取数字/单词时速度较慢_Python_Regex - Fatal编程技术网

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

Python—从字符串中提取数字/单词时速度较慢,python,regex,Python,Regex,这里的Noob试图通过做一个项目来学习python,因为我从书本上学的不好 我正在使用一大堆代码来执行一个在我看来很小的操作- 我想从以下字符串中提取4个变量 'Miami 0, New England 28' (变量为主场、客场、主场、客场) 我的程序运行得很慢,我想可能是这段代码。我想我正在寻找最快/最有效的方法 regex会更快吗?谢谢您的文本似乎可以拆分两次。首先是,,然后是空白: info1,info2 = s.split(',') home,home_score = info1

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

我正在使用一大堆代码来执行一个在我看来很小的操作-

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

'Miami 0, New England 28'  
(变量为主场、客场、主场、客场)

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


regex会更快吗?谢谢

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

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


使用regex可以轻松地完成这项工作,但您需要为它的可读性付费。

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

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


您可以使用正则表达式来实现这一点,而不需要太多的困难——但您需要为它的可读性付费。

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

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','newengland','28')]
并将这些值分配给变量

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

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
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','newengland','28')]
并将这些值分配给变量

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”
表示“无数字”

结果

('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”
表示“无数字”

什么代码位?你没有给我们看任何代码。你能发布你用来解析文本的代码吗?是的正则表达式非常快。什么代码?你没有给我们看任何代码。你能发布你用来解析文本的代码吗?是的,正则表达式非常快。为什么我这么笨。我花了大约3个小时思考我需要将数字和文本分开,而没有意识到它们之间有空格。@user2073606——这比我刚刚发布的内容稍微复杂一些。(我忘了团队名称中也可以有空格)。解决方法是
rsplit
而不是
split
,并且只允许字符串拆分一次。我认为你应该在
,“
上拆分,因为你不想在客场球队中占据领先位置。为什么我这么笨。我花了大约3个小时思考我需要将数字和文本分开,而没有意识到它们之间有空格。@user2073606——这比我刚刚发布的内容稍微复杂一些。(我忘了团队名称中也可以有空格)。修复方法是
rsplit
而不是
split
,并且只允许字符串拆分一次。我认为您应该在
,“
上拆分,因为您不希望客场球队名称中出现前导空格