9.19 用正则表达式解析不定行文本
用正则表达式解析不定行文本数据。
日志文件由数量不定的多行组成,想要解析成结构化数据。部分日志内容如下:
函数 A.regex(rs,Fi) 用正则表达式 rs 在序列 A 的字符串成员中查找匹配组,返回结果拼成以 Fi 为字段的序表。
脚本:
A | |
---|---|
1 | =file(“report.log”).read() |
2 | =A1.split(“Object Type:”).delete(1) |
3 | =A2.regex(“(.+)[\\s\\S]+left:(.+)[\\s\\S]+top:(.+)[\\s\\S]+right:(.+)[\\s\\S]+bottom:(.+)[\\s\\S]+Line Color:(.+)[\\s\\S]+Fill Color:\\t\\t(.+)[\\S\\s]+Link:(.+)[\\s\\S]+Type: (.+)[\\s\\S]+Condition Type:(.+)[\\s\\S]+Statement:\\s+(.+)[\\s\\S]+Link:(.+)[\\s\\S]+Type: (.+)[\\s(\\S]+Expression :(.+)”;ObjectType,left,top,right,bottom,lineColor,fillColor,ojbectLink,type,conditionType,statement,statementLink,statementType,lastExpress) |
4 | =file(“result.txt”).export@t(A3) |
A1 读取日志文件,返回字符串
A2 将文本内容按标记 "Object Type:" 拆分成多条记录,并丢弃第一条记录
A3 对每个成员查找正则表达式匹配组,拼成记录
A4 将 A3 结果导出到 result.txt
运行结果:
ID | ObjectType | left | top | right | bottom | lineColor | fillColor | … |
---|---|---|---|---|---|---|---|---|
1 | Symbol | 695 | 51 | 723 | 75 | RGB (0 0 0) | RGB (255 255 0) | … |
… | … | … | … | … | … | … | … | … |