繁体   English   中英

python - 从列表中的字符串中删除所有非数字字符

[英]python - removing all non-numeric characters from a string inside a list

我有一个这个列表:

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']

我想从此列表中删除所有非数字项,即-

['88 5', '91 5', '86 5', '87 6', '87 6']

我只想要两位数,即 -

['88', '91', '86', '87', '87']

如何在不更改索引的情况下实现它? 我尝试使用

my_list = [elem for elem in my_list if not any(c.isalpha() for c in elem)]

但它只是给我一个空列表......

编辑:正则表达式在这个列表上帮助了我,但如果列表是这样的怎么办:

my_list = ['J55udy 88 5', 'anim31al 91 5', 'Mo2 86 5', 'Geno 87 6', 'exhaled 87 6']

我的列表一直在变化,但它有一个不变的风格,首先是用户名,然后是两位数,然后是一位数,问题是有时用户在他的名字中使用数字,我怎么能只得到 2 位数字中间即使列表看起来像这样?

    my_list = ['J558udy 88 5', 'anim31al 91 5', 'Mo52 86 5', 'Gen3o 87 6', 'exhaled 87 6']

使用正则表达式。

前任:

import re

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
res = []
for i in my_list:
    m = re.search(r"\b(\d{2})\b", i)
    if m:
        res.append(m.group())
print(res)

输出:

['88', '91', '86', '87', '87']
  • \\b表达式边界。
  • \\d{2}查找 2 位整数。

您可以使用以下正则表达式:

import re
my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
regex = re.compile(r'\b\d\d\b')
my_list = [regex.search(i).group() for i in my_list]

my_list将变成:

['88', '91', '86', '87', '87']

正则表达式确实是一个很好的解决方案,但是没有它也可以实现。 下面的解决方案将找到字符串中的所有双位数,即使您有多个实例,例如: 'blabla 88 5 63'

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
digits = "123456789"
new_list = []

for elt in my_list:
    for k, l in enumerate(elt):
        if l in digits and k!= len(elt)-1 and elt[k+1] in digits:
            new_str = elt[k:k+2]
            new_list.append(new_str)

它可以变成一个单一的班轮:

digits = "123456789"
[elt[k:k+2] for elt in my_list for k, l in enumerate(elt) if l in digits and k!= len(elt)-1 and elt[k+1] in digits]
Out[37]: ['88', '91', '86', '87', '87']

您可能可以使用正则表达式来提取数字字符串。

import re

my_list = ['Judy 88 5', 'animal 91 5', 'Mo 86 5', 'Geno 87 6', 'exhaled 87 6']
nums = [re.search('\d+', lst).group(0) for lst in my_list]
print(nums)

输出

['88', '91', '86', '87', '87']
[Finished in 0.1s]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM