我正在尝试清理一个巨大的geoJson数据文件。我需要从
更改“text”字段的格式"text": "(2:Placename,Placename)"
到
"text": "Placename".
在Sublime文本中,我设法写了一个正则表达式,这使我能够选择并删除第一部分,留下这样的东西:
"text": "Placename)"
使用以下正则表达式,我可以选择上面的文字,但我需要将其缩小到最后一个字符:
text\": \".*?\)
无论如何我都无法弄清楚如何在整个文件的Placename字符串末尾选择“)
”字符并将其删除。请注意,这里的“地名”可以是任何地名,如纽约,伦敦等。
我尝试构建一个表达式,其中第一部分找到文本字段,然后忽略n个字符,直到找到“)
”字符。
经过实验和谷歌搜索后,我找不到解决方案。
答案 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是您要使用的组编号。这个表达式可以帮助您实现理想的结果。