使用Python中的正则表达式识别数字列表

时间:2015-07-23 23:25:56

标签: python regex

我正在处理在线数学导师计划的数据,我希望能够识别这些问题的某些功能。例如,对于以下问题:

Find the median of the 7 numbers in the following list:
[22, 13, 5, 16, 4, 12, 30]

我想知道是否

1. the problem includes a list, 
2. how long the longest list in the problem is, and 
3. how many numbers are in the problem total. 

所以对于上面的问题,它有一个列表,列表长7个数字,问题总数中有8个数字。

我已经编写了以下可以识别正数和负数以及浮点数的正则表达式脚本,但我无法弄清楚如何识别列表中的一系列数字:

'[-+]{0,1}[0-9]+\.{0,1}(?! )[0-9]+'

此外,数据格式不正确,所有以下示例都可以用于数字列表的样子:

[1, 2, 3]
1, 2, 3
1,2,3.
1,    2,    3,    4,    5

我已经在这几天工作了,并且已经停止在这方面取得任何进展。有人可以帮忙吗?用正则表达式来解决它可能不是一个问题,我只是不确定如何从这一点开始。

2 个答案:

答案 0 :(得分:2)

假设您将输入作为字符串 - 您可以使用re.findall仅提取其中的数字:

import re

s = """[1, -2, 3]
        1, 2, 3
        1,2,3.
        1,    2,    3,    4,    5"""

res = re.findall(r'-?\d+', s)
print res # ['1', '-2', '3', '1', '2', '3', '1', '2', '3', '1', '2', '3', '4', '5']

# and if you want to turn the strings into numbers:
print map(int, res)  # [1, -2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 5]

答案 1 :(得分:0)

除了alfasin提供的答案之外,您还可以进行第二次搜索以查找列表中包含的子字符串:

s = '''1, 2, 3
       [4, 5, 6]
       3, 2, 1. '''

l = re.findall(r'\[.*\]', s)
# number of lists in string
print len(l)

# largest array by length of numbers in each list found
print max([re.findall(r'\d+', i) for i in l])

# number of numbers total in problem
print re.findall(r'\d+', s)