我有一个包含所有英国区域(43000行)的csv文件。 但是,即使字段用逗号分隔,它们也不包含任何内容,因此如果字段的内容中包含逗号,则导入数据库失败。
幸运的是,只有一个字段在其内容中包含逗号。 我需要一个正则表达式,我可以用来在所有行上选择这个字段。
以下是数据示例:
Aberaman,Rhondda, Cynon, Taf (Rhondda, Cynon, Taff),51.69N,03.43W,SO0101
Aberangell,Powys,52.67N,03.71W,SH8410
这应该是:
Aberaman,"Rhondda, Cynon, Taf (Rhondda, Cynon, Taff)",51.69N,03.43W,SO0101
Aberangell,"Powys",52.67N,03.71W,SH8410
所以我需要基本上选择第二个字段,它位于第一个数字之前的第一个逗号和逗号之间。
我将使用sublime text 2来执行此正则表达式搜索。
答案 0 :(得分:4)
Sublime text2支持\K
,
<强>正则表达式:强>
^[^,]*,\K(.*?)(?=,\d)
替换字符串:
"\1"
<强>解释强>
^
断言我们处于一条线的起点。[^,]*
匹配任何不是逗号的字符零次或多次。,
文字逗号。\K
之前匹配的字符将被丢弃。(.*?)(?=,\d)
匹配任何字符zeror或更多次,必须跟,
和一个数字。 ?
之后*
进行了不情愿的匹配。答案 1 :(得分:1)
您可以尝试捕获组。只需将其替换为$1"$2"$3
或\1"\2"\3
^(\w+,)([^\d]*)(,.*)$
您也可以在Notepad++
中执行此操作。
找到:^(\w+,)([^\d]*)(,.*)$
替换为:$1"$2"$3
答案 2 :(得分:1)
应该能够解决问题的正则表达式是:
^.*?,(.*?),\d+
这匹配 任何(非贪婪的)直到第一个逗号(不包括在结果中) 然后任何东西到第二个逗号(将在一个组中) 另外一个条件是第二个逗号后必须有一个数字
所以你的小组是1美元