使用匹配器和正则表达式提取子字符串

时间:2014-02-14 13:56:16

标签: java regex string

我在Java中使用这种字符串格式:

Roma Termini 15:00 Milano Centrale 17:55 02:55 FRECCIAROSSA 9638 Price starting from 86.00 ? Select

结果必须是:

    Roma Termini
    15:00
    Milano Centrale
    17:55
    02.55
    FRECCIAROSSA
    9638
    86.00

像'Roma Termini'这样的子串可以包含括号。例如。 'Roma(tutte le stazioni)'

我尝试了Matcher的各种解决方案,但结果是错误的。

2 个答案:

答案 0 :(得分:1)

对于您的示例输入字符串,您希望从输出中排除“不太重要”的内容,例如"Price starting from"。您似乎想要遍历原始/目的地/时间(相对重要的数据)等数据。

您应该问自己,您的输入字符串来自哪里?在一组查询后从数据库中?解析XML文件后?回答它然后使用相同的资源来构建您想要的输出。这是合理的方法,不要浪费你的时间来解析你的输入字符串。

答案 1 :(得分:0)

试试这个正则表达式:

[A-Z]\w+\s([A-Z]\w+|[\(].*[\)])+|([0-9:]+(?:(\.[\s]|\.)[0-9]*)?)

使用以上内容:

String s="Roma Termini 15:00 Milano Centrale 17:55 02:55 FRECCIAROSSA 9638 Price starting from 86.00 ? Select";
       Pattern regex = Pattern.compile("[A-Z]\\w+\\s([A-Z]\\w+|[\\(].*[\\)])+|([0-9:]+(?:(\\.[\\s]|\\.)[0-9]*)?)");
       Matcher matcher = regex.matcher(s);
    while (matcher.find()) {
      System.out.println(matcher.group());
    }

Live Demo