试图解决一个简单的问题,但却难以理解如何正确地进行模式匹配。
我试过(?<=,).*?(?=,)
我的测试字符串是:"AAA","BBB","CCC","DDD","EE""E","FFF","GGGGG","HHHHHHHHHHHHHHHH"
我有一个非标准的引用csv文件,其中每列的双引号内可以有双引号。
因此,我需要使用正则表达式来使用非捕获组和查找来提取每一列,因为我不能使用捕获/匹配组
所以我需要一堆不同的表达式,只捕获以下结果:
“AAA”
“BBB”
“CCC”
“DDD”
“EE”“E”
“FFF”
等等
csv可能包含50个左右的列,上面的只是一个典型的例子
2条答案
按热度按时间relj7zay1#
根据你所说的,所有的字段都是双引号的。看起来你应该匹配引号字符串,而不是关注逗号(字段中间可能会出现逗号)。
最简单的方法是找到所有的
"(""|[^"]*)*"
,然后在后处理步骤中清除双引号。看起来相当可怕的逃生的地方!
输出:
tez616oj2#
以下是使用split的解决方案:
预期输出:
在这里,
(?<=\"),(?=\")
查找引号包围的逗号,并使用它们进行分割。你也可以看到如何剥离外引号和引号转义。
(?<!\")\"
表示任何引号,前面没有另一个引号。