java - 使用java的纪元时间的正则表达式(以毫秒为单位)
问题描述
我有这个字符串:
String str = "8240d66c-4771-4fae-9631-8a420f9099ca,458,cross_vendor_certificate_will_expire,1565102543758";
我想使用正则表达式从字符串中删除纪元时间我已经在网上搜索过,但我没有找到合适的解决方案。这是我到目前为止的代码:
public void createHashMapWithAlertCSVContent() throws Exception {
for(String item: lstServer) { //lstServer is a list contains names of the CSV files
String[] contentCSVStr= CmdHelper.Remote.File.cat(SERVER,INDENI_INSIGHT_PATH + "/"+item).split("\n");//Function to get CSV contents
mapServer.put(FileUtil.removeExtension(item), contentCSVStr);//Finally I add each String[] to hashmap key is the csv file name and String[] is the content of each CSV file
}
Assert.assertEquals(mapServer.size(), lstServer.size());
mapServer.remove("job");
}
可能的内容示例:
1. 0,TRIAL,8240d66c-4771-4fae-9631-8a420f9099ca,1566345600000,5,1565102549213
2. 8240d66c-4771-4fae-9631-8a420f9099ca,0,1565102673040
3. 8240d66c-4771-4fae-9631-8a420f9099ca,0.0.0.develop,4418,1565102673009
编辑:正则表达式可能是字符串中的任何位置,并且可能在字符串中多次退出。纪元时间字符串的长度肯定 > 10
解决方案
String input = "0,TRIAL,8240d66c-4771-4fae-9631-8a420f9099ca,1566345600000,5,1565102549213";
String output = input.replaceAll("\\d{10,},|,\\d{10,}", "");
System.out.println(output);
输出:
0,试用版,8240d66c-4771-4fae-9631-8a420f9099ca,5
正则表达式中的竖线|
表示两个选项,一个带有数字和逗号,另一个带有数字前的逗号。这考虑到时间戳可能是字符串中的第一个或最后一个,或者介于两者之间。
\\d
表示一个数字,并且{10,}
至少有 10 个,没有上限。请自行考虑下限是 10、13 还是其他位数。
极端情况:如果字符串仅包含一个或多个时间戳,则上述替换不会删除其中最后一个,因为它坚持每个时间戳删除一个逗号,而仅包含一个时间戳的字符串将没有逗号它。
推荐阅读
- java - TIMESTAMP WITH TIME ZONE 在 OJDBC6 和 OJDBC8 之间有所不同
- java - 自制 Maven 升级后的 OSX Maven 问题
- azure - 我可以将单个 Azure AD B2C 租户用于 Django App 的 DEV、STAGE 和 PROD 环境吗?
- azure-data-factory-2 - 对 FOR JSON AUTO 的 Azure 数据工厂数据流源查询支持
- c# - LINQ/Lambda 表达式:加入列表并使用给定公式查找数据的平均计数
- r - 如何在 R 中使用带有精美剪裁的 bang bangs (!!)?
- ipad - Xamarin.Forms 的 iPad 模拟器
- c# - 如何将自定义消息记录到 Azure 门户分析监控日志
- c# - 读取静态 Json 文件并在 ASP .Net Core 中将其作为表查看
- reactjs - 为什么 onClick 道具在第一次点击时返回未定义?