从字符串列表中提取8位数字

时间:2017-07-06 20:51:16

标签: python list text-extraction

我有一个字符串列表,可能包含字母,符号,数字等,如下所示:

list = ['\n', '', '0', '38059', '', '', '?_', '71229366', '', '1', '38059', '', '', '?_', '87640804', '', '2', '38059', '', '', '?_', '71758011', '', '', ':?', ';__', '71229366287640804271758011287169822']

如何过滤掉除小于10000000且大于99999999的数字以外的所有其他字符串?

预期产出:

list = ['71229366', '87640804', '71758011']

5 个答案:

答案 0 :(得分:3)

如果你不介意制作一个新的列表,你可以尝试一些只有列表理解的东西,比如

filtered_list = [i for i in list if i.isdigit() and 10000000 < int(i) < 99999999]

答案 1 :(得分:3)

您可以使用mapfilter

your_list = ['\n', '', '0', '38059', '', '', '?_', '71229366', '', '1', '38059', 
             '', '', '?_', '87640804', '', '2', '38059', '', '', '?_', '71758011', 
             '', '', ':?', ';__', '71229366287640804271758011287169822']

new_list = list(map(int, filter(lambda x: x.isdigit() and 10000000 < int(x) < 99999999, your_list)))
print(new_list)
python2上的

list()可选。

输出:

[71229366, 87640804, 71758011]

如果您不希望转换为整数,请删除map

>>> list(filter(lambda x: x.isdigit() and 10000000 < int(x) < 99999999, your_list))
['71229366', '87640804', '71758011']

答案 2 :(得分:1)

def valid(v):
    try:
        value = int(v)
        return 10000000 <= value <= 99999999
    except:
        return False

output = [x for x in list if valid(x)]

<强>解释

使用有效函数作为条件筛选列表中的所有值。

答案 3 :(得分:1)

data = ['\n', '', '0', '38059', '', '', '?_', '71229366', '', '1', '38059', 
        '', '', '?_', '87640804', '', '2', '38059', '', '', '?_', '71758011', 
        '', '', ':?', ';__', '71229366287640804271758011287169822']

res = []
for e in data:
    try:
        number = int(e)
    except ValueError:
        continue
    if 10000000  < number < 99999999:
        res.append(str(number))

打印(RES)

print(res)

输出:

 ['71229366', '87640804', '71758011']

答案 4 :(得分:0)

让我使用正则表达式提供简单高效的答案。不需要map(复制原始列表),也不需要将所有内容转换为int s;你基本上都在询问列表中如何保留所有8位整数

>>> filter(re.compile('^\d{8}$').match, data)
['71229366', '87640804', '71758011']

我们Here正则表达式,它恰好与8位数字匹配,然后通过向标准compile函数提供regex.match的部分应用来过滤列表。