java - 使用正则表达式从 json 路径中提取多个标记
问题描述
我必须从需要使用正则表达式匹配的文本中提取标记。示例文本将是这样的。
data.orderType.`order.created.time`
现在我正在使用以下正则表达式来标记这个字符串。
`(.*?)`|[^.]+
此正则表达式对字符串进行部分标记,并将标记作为
data,orderType,`order.created.time`
这里的问题是当令牌被取走时,反引号也被包括在内。我怎样才能转储反引号并得到以下内容?
data,orderType,order.created.time
解决方案
您已经捕获了反引号之间的部分,只要抓住matcher.group(1)
它是否参与了比赛(=如果它匹配):
String s = "data.orderType.`order.created.time`";
String regex = "`([^`]*)`|[^.`]+";
List<String> result = new ArrayList<>();
Matcher m = Pattern.compile(regex).matcher(s);
while (m.find()) {
if (m.group(1) != null) {
result.add(m.group(1));
} else {
result.add(m.group());
}
}
System.out.println(result);
// => [data, orderType, order.created.time]
注意我还在否定字符类中添加了一个反引号,[^.`]+
因为我假设反引号只能成对出现。
推荐阅读
- sharepoint - 将现有文件复制到服务器 SharePoint
- android - Flutter:如何获取 Firebase 身份验证凭据以更新电子邮件和密码
- python - 正则表达式检查指定字符串以外的数字
- javascript - 如何在循环外的javascript中使用循环变量?
- xml - XML 压缩算法(例如 XMill)怎么这么快?
- python - 如何将边缘属性作为边缘距离传递给 nx.closeness_centrality()?
- python - ETL 到 bigquery 使用气流未经许可云存储/云 sql
- asp.net-core - 如何在 ASP.NET Core 中间件中直接将响应主体设置为文件流?
- php - 需要帮助将日期数据从 csv(m/d/Y) 转换为 Y/m/d(将其写入另一个 csv)
- selenium-webdriver - Selenium Web 驱动程序的文件上传功能,用于不带 AutoIt 或 Skuliii 的非输入按钮