使用 RegEx 在 JSON 文件中提取和创建属性

Posted

技术标签:

【中文标题】使用 RegEx 在 JSON 文件中提取和创建属性【英文标题】:Extract and Create Property in JSON file with RegEx 【发布时间】:2016-08-11 06:46:04 【问题描述】:

我有以下JSON file。文件中点缀着以下内容:

"properties": 
    "Name": "Darlington",
    "Description": "<br><br><br> <table border=\"1\" padding=\"0\"> <tr><td>CCGcode</td><td>00C</td></tr> <tr><td>CCGname_short</td><td>Darlington</td></tr>"

使用正则表达式,我想提取 CCG 代码属性并将其添加回来,这样上面就变成了:

"properties": 
    "Name": "Darlington",
    "CCGcode": "00C",
    "Description": "<br><br><br> <table border=\"1\" padding=\"0\"> <tr><td>CCGcode</td><td>00C</td></tr> <tr><td>CCGname_short</td><td>Darlington</td></tr>"

我已经尝试了各种方法,但我无法让它工作。我正在使用 Sublime Text。

^("Description":").*?<td>CCGcode<\/td><td>([^<>\n]*).*$

上面选择了代码,但不确定如何获取它来创建属性。

【问题讨论】:

什么你试过了吗? 更新了问题。感谢@ClasG 【参考方案1】:

有一个非常简单但不那么优雅的解决方案。替换

"Description":.*?<td>CCGcode<\/td><td>([A-Z\d]*)<\/td>

"CCGCode":"\1",\n    \0

不知道 Sublime 如何处理替换,但您可能需要将替换 \0\1 更改为其他内容 - 例如$0$1

它的作用是找到 Description 条目和下面的 CCGCode 条目,将代码捕获到捕获组 1。

然后用新的CCGCode JSON 标记加上原始文本替换捕获组 0 - 整个匹配的文本。

这是一个非常脆弱的解决方案,但它适用于您的示例案例。

Check out example at regex101.

问候

【讨论】:

Check this question.。显然机器人\1$1 应该可以工作:) 这也行得通,但是(00C) 需要被概括,以便它适用于所有CCGcodes。 +1解释。谢谢 当然,我的马虎。这就是意图;)更正了答案。【参考方案2】:

试试这个

( *)"Description".*?CCGcode.*?<td>([^<]+)

Regex demo

这个给sublimetext3

找到什么:

( *)("Description".*?CCGcode.*?<td>)([^<]+)

替换为:

\1"CCGcode": "\3",\n\1\2

Demo

【讨论】:

以上是关于使用 RegEx 在 JSON 文件中提取和创建属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 regex 和 android 对不同的字段进行分类

使用 PHP 正则表达式从 html 中提取 JSON 对象

使用 c++/boost::regex 提取 HTML 文件的特定部分

如何将 JSON 中的值替换为 RegEx 在使用 Python 的文件中找到的值?

如何在 Python 中使用 Regex 从 HTML <a> 标签中提取 Facebook 页面 URL?

在 C++Builder 中使用 boost::regex 提取双引号