首页 > 解决方案 > 检查列表中的正则表达式时出错(python)

问题描述

我目前正在尝试使用正则表达式从列表中隔离字符串值中的值,并将唯一的数字附加到新列表中。是的,我知道这篇文章(正则表达式:在列表中搜索)并且正在使用其中的一个答案,但由于某种原因,它仍然包含新列表中值的文本部分。

[IN]:
['0.2 in', '1.3 in']

snowamt = ['0.2 in', '1.3 in']
r = re.compile("\d*\.\d*")
newlist = list(filter(r.match, snowamt)) # Read Note
print(newlist)

[OUT]:
['0.2 in', '1.3 in']

我已经尝试了很多正则表达式的组合,但我就是无法得到它。有人可以纠正我所知道的愚蠢错误。以下是我尝试过的一些正则表达式:

"(\d*\.\d*)"
"\d*\.\d*\s"
"\d*\.\d*\s$"
"^\d*\.\d*\s$"
"^\d*\.\d*\s"

我的最终目标是总结上面生成的列表中的所有值,我最初能够通过使用 re.split 来解决 re.compile :

inches_n = [ ]
i = 0
for n in snowamt:
    split = re.split(" ", n, maxsplit=0, flags=0)
    inches_n.append(split[0])
i += 1

print(inches_n) 

问题在于,当我通过抓取网站(可以抓取的地下天气)获取数字时,值“--in”可能会显示在原始列表中,如果我可以选择数字,它会减少步骤最初使用正则表达式,因为使用 re.split 我必须添加一个额外的步骤来重复新列表,并且只选择数字。

无论如何,有人可以纠正我的正则表达式,这样我就可以从这个问题中继续我的生活,谢谢!

标签: pythonregexlist

解决方案


要仅从列表中获取数字,您可以使用以下示例:

import re

snowamt = ["0.2 in", "1.3 in"]
r = re.compile(r"(\d+\.?\d*)")

newlist = [m.group(1) for i in snowamt if (m := r.match(i))]
print(newlist)

印刷:

['0.2', '1.3']

推荐阅读