首页 > 解决方案 > 从 CSV 获取列作为正则表达式组

问题描述

以前不怎么玩正则表达式,但现在它真的让我头疼。

我有一个多行 CSV 文件,我需要在第一个字段中找到以特定值开头的行,然后为该行的所有剩余字段设置组,即使某些字段为空。CSV 的长度可能会有所不同

例如:

monday,1,8,nice,,sunny,cold,
tuesday,3,2,hello,bye,,sad,tomorrow,
wednesday,8,ok,4,xxx,,999,welcome,

我想匹配以“星期二”开头的 CSV 行,并让所有字段不包括第一个匹配组,因此:

Group1 = 3
Group2 = 2
Group3 = hello
Group4 = bye
Group5 = 
Group6 = sad
Group7 = tomorrow

不幸的是,我坚持使用正则表达式,因为该工具只处理正则表达式。在 Go 中用几行代码解析它会容易得多,但在这种情况下根本不可能。

在 IRC 组上找到了一些帮助,它可以工作,但只能使用固定长度的 CSV 字符串:

^tuesday,([^,]+),([^,]+),([^,]+),([^,]+),([^,]*),([^,]+),([^,]+),$

也可以用可变长度来完成吗?

谢谢

标签: regex

解决方案


如果列数是固定的,那么这将起作用:

^tuesday,([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)

它找到以tuesday开头的行并创建 7 个组来捕获所有非,.

您可以在这里查看:https ://regexr.com/3pn81 。


推荐阅读