正则表达式匹配每个新行上的数字之前的最后一个空格

时间:2014-07-16 14:23:08

标签: regex

以下是我拥有的数据示例:

Allt Uisg an t-Sidhein,Highland 57.22N 04.29W NH613171
Alltwalis,Sir Gaerfyrddin (Carmarthenshire) 51.95N 04.27W SN4431
Alltwen,Castell-nedd Phort Talbot (Neath Port Talbot) 51.71N 03.85W SN7203
Allt-yr-yn,Casnewydd (Newport) 51.58N 03.02W ST2988

我有44000行这些数据(英国所有城镇)。 我想以CSV格式对其进行格式化,以便将其导入数据库。

这是示例数据在格式化后应该看起来的样子(用逗号分隔的数据项):

Allt Uisg an t-Sidhein,Highland,57.22N,04.29W,NH613171
Alltwalis,Sir Gaerfyrddin (Carmarthenshire),51.95N,04.27W,SN4431
Alltwen,Castell-nedd Phort Talbot (Neath Port Talbot),51.71N,03.85W,SN7203
Allt-yr-yn,Casnewydd (Newport),51.58N,03.02W,ST2988

所以现在我需要提出一个正则表达式来匹配所有行上第一个数字(北坐标)之前的每个空格,这样我就可以用逗号替换它。

任何信息或帮助将不胜感激。

6 个答案:

答案 0 :(得分:3)

您可以在此处使用肯定前瞻,这适用于您提供的数据:

在Sublime Text 2中:使用 Ctrl + H 打开搜索和替换,启用正则表达式

Find What:  +(?=\d+\.\d+[NSEW]|[A-Z]{2}\d{4,})
Replace With: ,

Live Demo

答案 1 :(得分:2)

您可以使用此正则表达式查找:

\s+(?=\d+\.\d+[NW]|[A-Z]{2}\d+)

Regx Demo

用逗号替换此匹配。

答案 2 :(得分:1)

使用一些类似的捕获组:

(.+) (\d{2}\.\d{2}[NS]) (\d{2}\.\d{2}[EW]) ([A-Z]{2}\d{4,})

然后您可以根据需要格式化它(在您的情况下使用逗号):

$1,$2,$3,$4

答案 3 :(得分:1)

您可以尝试这样的事情: (?=\d{2}\.\d{2}[NEWS])| (?=[A-Z]{2}\d+) (开头有空格)

答案 4 :(得分:1)

我会这样做:

import re
l = "Allt Uisg an t-Sidhein,Highland 57.22N 04.29W NH613171"
re.sub(".(\s)[0-9]", ",", l, 2)

答案 5 :(得分:1)

好消息是 sublimetext2 支持\K选项,

<强>模式:

.*\K (\S+) (\S+) (\S+)$

<强>替换

,\1,\2,\3

它使用,

替换最后三个单词之前的空格

<强>之前:

enter image description here

<强>后:

enter image description here

相关问题