【问题标题】:Split fillePath and filename using matcher and pattern使用匹配器和模式拆分填充路径和文件名
【发布时间】:2017-02-02 21:21:18
【问题描述】:

您好,我想根据给定的字符串值对文件路径和文件名进行分组。

例如com/abc/chilkatsoft/CkEmail1$.class

filePath = com/abc/chilkatsoft
fileName = CkEmail1$.class

我尝试使用(.*?)?(\\/.+),但它第一次出现'/'。 哪位朋友可以帮我解决这个问题。

实际上我想要解析日志文件数据,我已经完成了 80%。即

45013 Thu Aug 15 19:42:38 IST 2013 com/chilkatsoft/CkEmail.class

【问题讨论】:

  • 如果你想为此使用正则表达式,那就是(.+)/(.+)
  • 任何理由使用正则表达式而不是......让我们说 indexOf ???
  • @ΦXocę웃Пepeúpaツ 我想你的意思是lastIndexOf('/'),对吧?
  • jap...为什么正则表达式是我的问题????
  • @WiktorStribiżew:感谢它的作品很棒的人。实际上我想解析我已经完成 80% 的日志文件数据。即“45013 Thu Aug 15 19:42:38 IST 2013 com/chilkatsoft/CkEmail.class”,我使用了“^([\\d]+) ([\\w:/\\s{5}]+) (.+)/(.+)" 现在。

标签: java regex pattern-matching


【解决方案1】:

由于你在解析日志行,而你需要匹配的数据几乎占据了整行,所以可以使用贪心点匹配模式。

^(\d+)\s+(.*)\s+(.+)/(.+)

见regex demo

这里,

  • ^ - 字符串/行开始
  • (\d+) - 第 1 组捕获 1 个或多个数字
  • \s+ - 1+ 个空格(如果使用多行修饰符,则替换为常规空格)
  • (.*) - 第 2 组捕获整个队列的其余部分,直到最后一个空格
  • \s - 一个空格字符
  • (.+) - 任何 0+ 个字符直到最后一个 /
  • / - 斜线
  • (.+) - 该行的其余部分。

为了使模式更明确,请拼出里面的模式:

^(\d+)\s+([a-zA-Z0-9\s]+\d{2}:\d{2}:\d{2}\s+[A-Za-z]+\s+\d{4})\s+(.+)/(.+)

见this regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多