python - 检查列表中的正则表达式时出错(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 我必须添加一个额外的步骤来重复新列表,并且只选择数字。
无论如何,有人可以纠正我的正则表达式,这样我就可以从这个问题中继续我的生活,谢谢!
解决方案
要仅从列表中获取数字,您可以使用以下示例:
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']
推荐阅读
- angular - 角度选择更改刷新组件
- android - 包含 Android 仪器测试时如何运行 jacocoTestReport?
- wso2 - WSO2 IS:claim-config.xml - 它是只读一次,还是每次启动服务器时读取?
- c# - 如何在使用 random.range 时停止获取重复数字?
- android - kontakt 信标未检测到
- ios - 无法使用 Microsoft 应用中心在应用商店上部署应用
- excel - VBA xlBarClustered 如何区分这两种不同的预设?
- firebase - 云函数执行树
- c# - 如何从 for/if 内部获取返回值
- docker - 如何在 docker 镜像上安装 bcrypt?