gpt4 book ai didi

Python:使用正则表达式检查列表,填空

转载 作者:行者123 更新时间:2023-11-28 22:51:30 28 4
gpt4 key购买 nike

我已尝试找到执行此操作的方法并在此处在线搜索,但找不到可帮助我解决此问题的示例。

我正在读取大型 csv 中的行并将每一行更改为列表。问题是数据源不是很干净。有时它有空字符串或错误数据,发生这种情况时我需要填写默认值。例如:

list_ex1 = ['apple','9','','2012-03-05','455.6']
list_ex2 = ['pear','0','45','wrong_entry','565.11']

这里,list_ex1 有一个空白的第三个条目,而 list_ex2 在应该是日期的地方有错误的数据。明确地说,我可以创建一个正则表达式来限制五个条目中的每一个应该是什么:

reg_ex_check = ['[A-Za-z]+','[0-9]','[0-9]','[0-9]{4}-[0-1][0-9]-[0-3][0-9]','[0-9.]+']

即:

  • 第一个条目:一个字符串,没有数字
  • 第二个条目:恰好是 0 到 9 之间的一位数
  • 第 3 个条目:也正好是一位数字。
  • 第 4 个条目:标准格式的日期(年份允许任何四位整数)
  • 第 5 个条目: float

如果条目为空或与正则表达式不匹配,则应填写/替换为以下默认值:

default_fill = ['empty','0','0','2000-01-01','0']

我不确定最好的方法是什么。我想我可以写一个复杂的循环,但做这样的事情对我来说感觉不是很“pythonic”。

有什么更好的主意吗?

最佳答案

在列表理解中使用 zip 和条件表达式:

[x if re.match(r,x) else d for x,r,d in zip(list_ex2,reg_ex_check,default_fill)]
Out[14]: ['pear', '0', '45', '2000-01-01', '565.11']

您实际上不需要显式检查空白字符串,因为您的各种正则表达式(正则表达式的复数)都将在空白字符串上失败。

其他注意事项:您可能仍想为每个正则表达式的字符串末尾添加一个 anchor 。使用 re.match 可确保它从一开始就尝试匹配,但仍不能保证您的匹配 之后没有非法内容。考虑:

['pear and a pear tree', '0blah', '4 4 4', '2000-01-0000', '192.168.0.bananas']

如果您不在每个正则表达式的末尾添加 $ anchor ,则上面的整个列表是“可接受的”:-)

关于Python:使用正则表达式检查列表,填空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21470039/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com