我尝试读取CSV并使用正则表达式捕获组拆分每一行。CSV的最后一列中有换行符,我的正则表达式的第二个捕获组似乎在第一次出现该换行符时中断,无法捕获字符串的其余部分。
下面是我目前所做的工作。第一条记录总是以ABC-
开头,所以我将它放在第一个捕获组中,它之后的所有内容,直到下一次出现ABC-
或文件结束(如果是最后一条记录),都应该由第二个捕获组捕获。第一行按预期工作,因为其中没有换行符,但其余的不会。
我的正则表达式:([A-Z1-9]+)-\d*,(.*)
我的测试字符串:
ABC-1,01/01/1974,X1,Y1,Z1,"RANDOM SINLGE LINE TEXT 1",
ABC-2,01/01/1974,X2,Y2,Z2,"THIS IS
A RANDOM
MULTI LINE
TEXT 2",
ABC-3,01/01/1974,X3,Y3,Z3,"THIS IS
ANOTHER RANDOM
MULTI LINE TEXT",
预期结果为:
3次匹配
- 匹配1:**
第1组:ABC-1,
第2组:1974年1月1日,X1、Y1、Z1,"随机单线文本1",
- 匹配项2:**
第1组:ABC-2,
第2组:1974年1月1日,X2,Y2,Z2 ",这是
随机
多线
文本2 ",
- 匹配3:**
第1组:ABC-3,
第2组:1974年1月1日,X3,Y3,Z3 ",这是
另一项随机
多行文本",
2条答案
按热度按时间bxjv4tth1#
您可以使用
请参见regex demo。仅使用带有 * multiline * 标志的regex demo(如果它不是Ruby,因为
^
已经匹配Ruby中的行开始位置)。^
-行的开始([A-Z]+-\d+)
-第1组:一个或多个大写ASCII字母,然后是-
和一个或多个数字,
-逗号(.*(?:\n(?![A-Z]+-\d+,).*)*)
-组2:.*
-生产线的其余部分(?:\n(?![A-Z]+-\d+,).*)*
-不以一个或多个大写ASCII字母开头的零行或多行,然后是-
和一个或多个数字+逗号slhcrj9b2#
您可以尝试通过前瞻Assert来限制第二组:
这里。