多行非终止正则表达式

Multiline non terminated regex

我在 ASCII tables 中遇到了正则表达式解析列的问题。

想象一个 ASCII table 像:

COL1  | COL2    | COL3
======================
ONE   | APPLE   | PIE
----------------------
TWO   | APPLE   | PIES
----------------------
THREE | PLUM-   | PIES
      | APRICOT |

对于前 2 个条目,一个简单的捕获正则表达式就可以完成交易

(?:(?<COL1>\w+)\s*\|\s*(?<COL2>\w+)\s*\|\s*(?<COL3>\w+)\s*)

但是这个正则表达式捕获了 header,并且它没有捕获第 3 行。

我无法解决以下两个问题:

感谢您的帮助!

Some people, when confronted with a problem, think “I know, I'll use regular expressions.” Now they have two problems. (http://regex.info/blog/2006-09-15/247)

我假设输入字符串如下:

String input = ""
            + "\n" + "COL1  | COL2    | COL3"
            + "\n" + "======================"
            + "\n" + "ONE   | APPLE   | PIE "
            + "\n" + "----------------------"
            + "\n" + "TWO   | APPLE   | PIES"
            + "\n" + "----------------------"
            + "\n" + "THREE | PLUM-   | PIES"
            + "\n" + "      | APRICOT |     ";

要拆分 header 和 table,您可以使用 input.split("={2,}")。 returns header 和 table.

的字符串数组

修剪 table 后,您可以使用 table.split("-{2,}") 获取 table 的行。

可以使用 row.split("\|") 将所有行转换为单元格数组。

处理多行:在将行转换为单元格之前,您可以调用row.split("\n")拆分多行。 当此拆分操作 returns 一个具有多个元素的数组时,它们应该在管道上拆分 (split("\|")) 并且结果单元格应该合并。

从这里开始,只需对元素进行操作即可将其转换为您想要的格式。