【问题标题】:Parse string using pattern and Matcher使用模式和匹配器解析字符串
【发布时间】:2016-03-26 15:52:32
【问题描述】:

我有字符串为

 str = "-------------Date 26032016
Hi Team, I am alone.
-------------Time 206066";

我需要

大家好,我一个人。

我正在使用以下代码,但是

Pattern p = Pattern.compile("(-*?) H");
        Matcher m = p.matcher(str);
        while (m.find()) {
            part = m.group(1);
        }
Pattern p1 = Pattern.compile("(.*?) -");
        Matcher m1 = p1.matcher(part);
        while (m1.find()) {
            part1 = m1.group(1);
        }

但不工作。

我正在尝试查找日期(例如 ------------- 日期 26032016)和时间(例如 ------------ -时间 206066)。

【问题讨论】:

  • 你的预期输出是什么?
  • 您好!您认为您可以扩展一下您正在尝试做的事情吗?如果你只是想找到那个字符串,你能不能只匹配字符串本身?或者你想在破折号和日期之间找到任何字符串?
  • 我需要嗨团队,我一个人。
  • @Kezz101 :是的,我正在尝试查找日期(-------------日期 26032016)和时间(--------- ----时间206066)..

标签: java string pattern-matching matcher


【解决方案1】:

为什么要使用多个匹配器? 你可以简单地使用:

-*Date \\d{8}\n(.*)\n-*Time \\d{6}

这假设与您的字符串值对应的行确实是不同的行,而不仅仅是意外换行。

否则,您需要从模式中替换(或删除)\n 字符

【讨论】:

  • 我正在以 Hi Team 的身份获得输出,我一个人。--------- 如何删除此“-----------”
  • 假设第二个- 中缺少*。或者你没有换行符。然后(.*) 将采用任何字符。您应该在第二个破折号序列中使用-+。 (至少一个破折号)
  • 糟糕,可能不好。您需要从结果中排除破折号:(.*[^-])
【解决方案2】:

您可以使用这样的网站来创建正则表达式:https://regex101.com/

这应该可行:

Pattern p = Pattern.compile("-*Date \\d*\\r?\\n?(.*)\\r?\\n?-*Time \\d*");
Matcher m = p.matcher(str);
while (m.find()) {
            part = m.group(1); //part is now 'Hi Team, I am alone.'

}

【讨论】:

  • 我正在以 Hi Team 的身份获得输出,我一个人。--------- 如何删除此“-----------”
  • 请再次检查您输入的字符串,您可以将 (.*) 更改为 ([^-]*)
猜你喜欢
  • 1970-01-01
  • 2015-06-22
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
相关资源
最近更新 更多