Regex Wrapping Quotes

时间:2015-10-15 10:00:14

标签: regex csv notepad++

我试图在CSV文件中包含某些内容部分的引号,当前的布局是这样的:

 ###element1,element2,element3,element4,element5,element6,element7,element8, "element9,
element9,""element9"",element9,
element9,element9,""element9",element10,
###
###符号描述了一个新行,每个新行应该有一个,问题是我需要将所有元素9放到一组双引号中,但是在该区域内有多个双引号实例它将元素分解为新字段,使我的表格扩展到我最初设置的字段之外。所以我相信我需要删除所有"在element9的开始和结束之间标记,然后重新引入一组以突出显示整个部分。

我首先尝试从头开始选择第8个逗号,然后从结尾选择2个逗号:

 ^((?:[^,]+,){8})(.+)((?:,[^,]*){2})$

并替换为

$1"$2"$3

我尝试将起始###和###作为目标,以选择这两个元素,但没有成功。

关于如何做到这一点的任何建议

更新

    ###BLAHBLAH,BLAHBLAH,BLAHBLAH,BLAHBLAH,BLAHBLAH,BLAHBLAH,BLAHBLAH,BLAHBLAH,BLAHBLAH,
BLAHBLAH,
BLAHBLAH,
BLAHBLAH, BLAHBLAH,
BLAHBLAH, BLAHBLAH,
BLAHBLAH,
"BLAHBLAH""",E,
###

最后一个字段似乎总是包含一个大写字母,之前的字段在引用位置上有所不同,所以要真正针对整个部分我需要弄清楚有多少逗号和我需要去的多少,删除引号和然后将它们恢复到正确的位置。

3 个答案:

答案 0 :(得分:4)

###(?:[^,]*,){8}\K([\s\S]*?)(?=,[^,]*,[^,]*?###)

试试这个。"\1""$1"。请参阅演示。

https://regex101.com/r/tD0dU9/13

答案 1 :(得分:3)

/^(?:[^,]*,){8}([^#]*),[^,]*,[^,]*$/s

https://regex101.com/r/hU8yO6/1

我认为你的正则表达式是正确的,除了需要/ s修饰符。

对于记事本++,通过勾选“匹配换行符”来获取s修饰符:

^(?:[^,]*,){8}([^#]*),[^,]*,[^,]*$

这看起来是一个很好的参考:http://docs.notepad-plus-plus.org/index.php/Regular_Expressions

您可能希望适当地添加parens来制作捕获组。

答案 2 :(得分:-4)

^#+[^"]+"([^#]+),[^,]+,[^,]+###\s*$