Java 使用正则表达式从文件中提取JSON键值映射
我对正则表达式不是很在行,我试图用手工编写的解析器解决一个问题,我自己的自行车,它在一些我无法预料的输入上失败了。问题如下:我有JavaScript i18n文件,这些文件连同翻译一起,包含一些可能在文件中某处定义的其他配置内容(这就是为什么手工制作的解析器很难处理这个问题的主要原因),所以文件是这样的:Java 使用正则表达式从文件中提取JSON键值映射,java,json,regex,Java,Json,Regex,我对正则表达式不是很在行,我试图用手工编写的解析器解决一个问题,我自己的自行车,它在一些我无法预料的输入上失败了。问题如下:我有JavaScript i18n文件,这些文件连同翻译一起,包含一些可能在文件中某处定义的其他配置内容(这就是为什么手工制作的解析器很难处理这个问题的主要原因),所以文件是这样的: (function() { 'use strict'; //some configuration stuff (some other stuff may be insterte
(function() {
'use strict';
//some configuration stuff (some other stuff may be insterted)
var translations = angular.module('module.translations.languages.enUs', []);
translations.constant('translationsName', {
"first_label":"first_label_value",
"second_label":"second_label_value"
//etc
});
}());
上面的示例只是一个可能的模板选项,但它们都有一个共同点——翻译标签被定义为键值json,它只是序列化为json的java映射。
我的目标是从文件中只获取这些键值json,将其反序列化为映射,对其执行一些操作并再次插入。因此,问题是:也许有人已经准备好并证明了正则表达式可以处理这种情况-在文本中找到键值json的映射?如果是这样,我将非常感激!
谢谢
干杯
Andrey您可以使用此regexp查找
“键”:“值”
对:
“([^”]+)”\s*:\s*“([^”]+)”,?
组1是键,组2是值
它还会找到“键”:“值”
,“键”:“值”
或“键”:“值”
对
(单击Java按钮,然后单击Test按钮)
在regex101上也是一个例子
解释
“([^”]+)”
:捕获任何字符,但双引号之间的双引号除外(这是关键)
\s*?
:后跟零个或多个空格
\s*
:后跟冒号
\s*
:后跟零个或多个空格
“([^”]+)”
:捕获除双引号之间的双引号以外的任何字符(这是值)我有类似的问题。我使用了你的正则表达式,它对我有效。谢谢。太好了!谢谢你的反馈。如果值是数字,因此没有双引号,遇到问题吗?请使用以下正则表达式:([^]+)“\s*:\s*”([^“]+)”)”)(([^“]+)”\s*:\s*(\d+\.?\d*)))((([^“]+)”\s*:\s*(\w+)
)但这不处理任何重叠,例如,“列表”:“{\“num\”:“\1\”,
仅返回:“列表”:“{/code>Hi MetricRat
应回答您的请求。以下是一个示例: