我有以下代码段: 我想在列/键“Something”上找到行,值为数字(它们始终是整数)并删除匹配的行。我用re.compile()
尝试过for row in list:
if re.compile("\d") in row["Something"]:
print(row)
del (row)
在这种情况下如何正确实施?
答案 0 :(得分:1)
在迭代时不要尝试从列表中删除项目,它不能很好地工作:Remove items from a list while iterating。无论如何,del row
无效,因为您只是删除了名称,而不是列表中的项目。
如果row["Something"]
是整数值,我假设您要删除行。
当数据只是数字时,我会使用列表推导过滤掉重建列表(使用isdigit()
可以避免使用正则表达式):
[row for row in lst if not row["Something"].isdigit()]
心灵,这不会照顾负数。为此,您需要像re.match("-?\d+",row["Something"])
这样的正则表达式检查
答案 1 :(得分:0)
您可能希望匹配不包含数字的行,而不是删除您的行:
import re
rx = re.compile(r'^\D+$')
new_rows = (row for row in lst if rx.match(row))
这会生成一个生成器,您可以迭代或将其完全转换为列表
此外,使用list
作为变量名是禁止。