如何在字符串中间抓取数字? (蟒蛇)

时间:2011-06-17 19:12:14

标签: python regex

random string
this is 34 the string 3 that, i need 234
random string
random string
random string
random string

random string
this is 1 the string 34 that, i need 22
random string
random string
random string
random string

random string
this is 35 the string 55 that, i need 12
random string
random string
random string
random string

在一个字符串中有多行。其中一条线重复,但每次都有不同的数字。我想知道如何将数字存储在这些行中。数字将始终位于行中的相同位置,但可以是任意数量的数字。

编辑:随机字符串中也可以包含数字。

3 个答案:

答案 0 :(得分:7)

使用正则表达式:

>>> import re
>>> comp_re = re.compile('this is (\d+) the string (\d+) that, i need (\d+)')
>>> s = """random string
this is 34 the string 3 that, i need 234
random string
random string
random string
random string

random string
this is 1 the string 34 that, i need 22
random string
random string
random string
random string

random string
this is 35 the string 55 that, i need 12
random string
random string
random string
random string
"""
>>> comp_re.findall(s)
[('34', '3', '234'), ('1', '34', '22'), ('35', '55', '12')]

答案 1 :(得分:4)

使用正则表达式

import re
s = """random string
this is 34 the string 3 that, i need 234
random string
random string
random string
"""
re.findall('this is (\d+) the string (\d+) that, i need (\d+)', s)    

答案 2 :(得分:4)

假设s是整个多行字符串,您可以使用

之类的代码
my_list = []
for line in s.splitlines():
    ints = filter(str.isdigit, line.split())
    if ints:
          my_list.append(map(int, ints))

这将为您提供列表列表,每行包含一个整数的整数列表。如果您想要一个包含所有数字的列表,请使用

my_list = [int(i) for line in s.splitlines()
           for i in filter(str.isdigit, line.split())]