选择正则表达式中子字符串的最后一个字符

时间:2014-03-20 10:31:37

标签: regex geojson

我正在尝试清理一个巨大的geoJson数据文件。我需要从

更改“text”字段的格式
"text": "(2:Placename,Placename)"

"text": "Placename".

在Sublime文本中,我设法写了一个正则表达式,这使我能够选择并删除第一部分,留下这样的东西:

"text": "Placename)"

使用以下正则表达式,我可以选择上面的文字,但我需要将其缩小到最后一个字符:

text\": \".*?\)

无论如何我都无法弄清楚如何在整个文件的Placename字符串末尾选择“)”字符并将其删除。请注意,这里的“地名”可以是任何地名,如纽约,伦敦等。

我尝试构建一个表达式,其中第一部分找到文本字段,然后忽略n个字符,直到找到“)”字符。 经过实验和谷歌搜索后,我找不到解决方案。

2 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式捕获第二个地标字段的值:

/"text": "+\(\d+:[^,]+,(.*?)\)/

将在$ 1中捕获“地名”

有关捕获括号的更多信息:http://www.regular-expressions.info/brackets.html

诀窍是使用倒置的字符类并转义要匹配的任何括号。

HTH

答案 1 :(得分:1)

我不知道您是否使用的是Unix系统,但可能sed可以为您完成大部分工作。它可以解释正则表达式,捕获组以及由其他字符组替换。我用sed尝试过一个例子,下面的sed命令对我有用:

echo "\"text\": \"(2:Placename,Placename)\"" | sed -r 's/(\"text\": )\"\([[:digit:]]:[^0-9]+,([^0-9]+)\)\"/\1\"\2\"/g'

-r允许sed解释正则表达式。我正在使用括号来捕获稍后将在替换中使用的组(例如," text"的组和第二个地名的组)。在sed的替换部分中,您可以使用\ n来使用组,其中n是您要使用的组编号。这个表达式可以帮助您实现理想的结果。