正则表达式匹配第一个数字之前的第一个逗号和逗号之间的文本

时间:2014-07-23 12:54:26

标签: regex csv

我有一个包含所有英国区域(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来执行此正则表达式搜索。

3 个答案:

答案 0 :(得分:4)

Sublime text2支持\K

<强>正则表达式:

^[^,]*,\K(.*?)(?=,\d)

替换字符串:

"\1"

DEMO

<强>解释

  • ^断言我们处于一条线的起点。
  • [^,]*匹配任何不是逗号的字符零次或多次。
  • ,文字逗号。
  • \K之前匹配的字符将被丢弃。
  • (.*?)(?=,\d)匹配任何字符zeror或更多次,必须跟,和一个数字。 ?之后*进行了不情愿的匹配。

答案 1 :(得分:1)

您可以尝试捕获组。只需将其替换为$1"$2"$3\1"\2"\3

即可
^(\w+,)([^\d]*)(,.*)$

Live Demo


您也可以在Notepad++中执行此操作。

找到:^(\w+,)([^\d]*)(,.*)$

替换为:$1"$2"$3

答案 2 :(得分:1)

应该能够解决问题的正则表达式是:

^.*?,(.*?),\d+

这匹配 任何(非贪婪的)直到第一个逗号(不包括在结果中) 然后任何东西到第二个逗号(将在一个组中) 另外一个条件是第二个逗号后必须有一个数字

所以你的小组是1美元