【问题标题】:Regex for epoch time in millisecond using java使用java的纪元时间的正则表达式(以毫秒为单位)
【发布时间】:2019-12-14 05:26:03
【问题描述】:

我有这个字符串:

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

【问题讨论】:

  • @azurefrog - 我忘了提到这是我可能拥有的字符串的示例,纪元字符串可能位于字符串中的任何位置[在中间、开头或结尾]
  • 请描述您希望获得的任何输入字符串的格式,并告诉我们您打算在minimal reproducible example 中使用的代码。一个 10 多个输入字符串示例的列表也很好 :) 此外,您打算如何识别 epoch 字符串?关于逗号分隔的数字,我在字符串中看到 458 和 1565102543758。
  • 您能详细说明一下吗?假设您最终要拆分字符串以提取各个元素,如果它们可以出现在任何位置(如果纪元时间在它们之前,至少偏移 1),您将如何识别它们?除此之外,正如 Avi 已经说过的:你如何区分时间戳和任何其他数字?一种方法可能是期望时间戳具有一定的长度(即,您不期望几年前的任何时间戳)并且您的其他数字不可能那么大,在 all 下是否会出现这种情况情况?
  • @Thomas 我会编辑我的问题
  • 你试过什么?你的搜索结果是什么,在哪些方面是不够的?您已经为问题的措辞付出了很大的努力,但否则它可能看起来背后真的没有任何努力?

标签: java time epoch


【解决方案1】:
    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,TRIAL,8240d66c-4771-4fae-9631-8a420f9099ca,5

正则表达式中的竖线|表示两个选项,一个是数字和逗号,另一个是数字前的逗号。这考虑到时间戳可能是字符串中的第一个或最后一个,或者介于两者之间。

\\d 表示一个数字,{10,} 表示至少有 10 个,没有上限。请自行考虑下限应该是 10、13 还是其他位数。

极端情况:如果字符串由一个或多个时间戳组成,则上述替换不会删除最后一个,因为它坚持删除每个时间戳的一个逗号,并且字符串由的只有一个时间戳不会有逗号。

【讨论】:

  • 你怎么知道 date >= 1970-01-12 13:46:40 是一个有效的过滤器?
  • 提问者在评论中说至少有10位数字,@Andreas。我和你一样假设这意味着 1970 年 1 月 12 日之后(不是说早期的时间戳是用前导零写的)。
  • 使用 OP 的 latest comment“仅‘当前’时间”,我建议 \d{13,},这意味着日期 >= 2001-09-09 01:46:40。
  • 我只考虑当前日期时间和之前的日期,过去的日期不是我必须处理的情况。
  • 我同意,@Andreas。我相信提问者会自己做出最后的调整。
猜你喜欢
  • 2017-10-09
  • 2013-05-14
  • 2014-03-14
  • 1970-01-01
  • 2011-06-02
  • 2017-01-15
  • 2020-05-05
  • 2017-02-17
  • 2019-02-24
相关资源
最近更新 更多