1

我正在尝试编写一个函数,该函数将接受一个字符串并返回一个字典,其中包含字符串中包含的所有数字以及它们开始的索引。

例如字符串"1this is a 134 test15"会产生字典{ 0:1, 11:134, 19:15 }

我已经看到了许多使用正则表达式的类似问题的解决方案,它们对于提取数字本身非常有效,但我无法找到将这些数字与它们出现的索引相关联的方法。

是否可以使用正则表达式从字符串中提取此类信息,或者是否有其他方法可以更适合此类应用程序。

4

4 回答 4

7
In [44]: strs="1this is a 134 test15"

In [45]: {m.start(0):int(m.group(0)) for m in re.finditer("\d+", strs)}
Out[45]: {0: 1, 11: 134, 19: 15}
于 2013-04-16T22:57:07.377 回答
4
>>> import re
>>> text = "1this is a 134 test15"
>>> d = dict((m.start(), int(m.group())) for m in re.finditer(r'\d+', text))
>>> d
{0: 1, 19: 15, 11: 134}
于 2013-04-16T22:57:07.237 回答
1

start()正则表达式s的方法MatchObject将提供当前匹配的字符串偏移量。

于 2013-04-16T23:00:03.173 回答
0

如果您正在寻找一个功能,我希望这可能有用。肯定有更简单的方法来做到这一点。然而,这是我已经解决的问题。我已经尽力了 :)

def function(string,dic={},p=0):

   if len(string)==0:
      return dic

   else:
      i=0
      if string[0] in '1234567890':
        while string[i] in '0123456789':
          i+=1
          p+=1
        dic[p-len(string[:1])]=int(string[:i])
        string=string[i:]
        return function(string,dic,p)
      else: 
        p+=1
        return function(string[1:],dic,p)
于 2013-04-17T21:11:18.463 回答