我遇到了使用正则表达式解析ASCII表中的列的问题。
想象一下如下的ASCII表:
COL1 | COL2 | COL3
======================
ONE | APPLE | PIE
----------------------
TWO | APPLE | PIES
----------------------
THREE | PLUM- | PIES
| APRICOT |
对于前两个条目,一个普通的捕获正则表达式完成交易
(?:(?<COL1>\w+)\s*\|\s*(?<COL2>\w+)\s*\|\s*(?<COL3>\w+)\s*)
然而,这个正则表达式捕获了标题,并且它没有捕获第3行。
我无法解决以下两个问题:
COL2
捕获组以捕获多行条目PLUM-APRICOT
?感谢您的帮助!
答案 0 :(得分:1)
有些人在面对问题时会思考 “我知道,我会使用正则表达式。”现在他们有两个问题。 (http://regex.info/blog/2006-09-15/247)
我假设输入字符串如下:
it("should work", done => {
(async () => {
await something;
done();
})();
});
要拆分标题和表格,您可以使用String input = ""
+ "\n" + "COL1 | COL2 | COL3"
+ "\n" + "======================"
+ "\n" + "ONE | APPLE | PIE "
+ "\n" + "----------------------"
+ "\n" + "TWO | APPLE | PIES"
+ "\n" + "----------------------"
+ "\n" + "THREE | PLUM- | PIES"
+ "\n" + " | APRICOT | ";
。这将返回标题和表的字符串数组。
修剪表格后,您可以使用input.split("={2,}")
获取表格的行。
可以使用table.split("-{2,}")
将所有行转换为单元格数组。
处理多行行:在将行转换为单元格之前,您可以调用row.split("\\|")
来分割多行行。
当这个拆分操作返回一个包含多个元素的数组时,它们应该在管道(row.split("\n")
)上拆分,并且应该合并生成的单元格。
从这里开始,只需要元素操作即可将其转换为您想要的格式。