多行非终止正则表达式
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 行。
我无法解决以下两个问题:
- 如何排除header?
- 如何扩展
COL2
捕获组以捕获多行条目 PLUM-APRICOT
?
感谢您的帮助!
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("\|")
) 并且结果单元格应该合并。
从这里开始,只需对元素进行操作即可将其转换为您想要的格式。
我在 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 行。
我无法解决以下两个问题:
- 如何排除header?
- 如何扩展
COL2
捕获组以捕获多行条目PLUM-APRICOT
?
感谢您的帮助!
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("\|")
) 并且结果单元格应该合并。
从这里开始,只需对元素进行操作即可将其转换为您想要的格式。