Java 使用matcher和regex提取子字符串

Java 使用matcher和regex提取子字符串,java,regex,string,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”的子字符

我在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”的子字符串可以包含括号。例如,“罗马(图特·勒斯塔齐奥尼)”


我用
匹配器尝试了各种解决方案,但结果是错误的。

对于您的示例输入字符串,您希望从输出中排除“不太重要”的内容,如
“从”
开始的价格”。似乎您希望遍历诸如原点/目的地/时间之类的数据(相对重要的数据)

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

试试这个正则表达式:

[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());
    }

你试过什么吗?我是正则表达式的新手,我试过:([A-Za-z()\s]+)(\d{2}:\d{2})([A-Za-z()\s]+)(\d{2}:\d{2})(\d{2}:\d{2})([A-Za-z()\s]+)({d+[A-Za-z]+)(\d+[A-Za-z]+)(\d{2}.\d}\d})我必须检查我的正则表达式项目的答案。我无法修改构造字符串的方法。@d3vnico您不会修改构造字符串的方法,您将以新方法的名称重新使用它,并进行一些修改。我必须使用正则表达式。在一个更美好的世界里,也许我可以遵循你的推理路线,但我不能…不要工作!我将正则表达式插入到:
Pattern=Pattern.compile(“[A-Z]\\w+\\s([A-Z]\\w+\[\\(].[\\)])+[0-9:+(?:\\.[0-9]*)?”我不知道Java,但我认为会有一个名为
匹配的方法。你试过了吗?我知道
Matcher.matches()
(返回false!),代码是为错误检查而编写的。我试过
string.split(“你的正则表达式”)但结果是:数组[1个空间,2个空间,2个空间,2个空间,2个空间,2个空间,2个空间,FRECCIAROSSA,Price start from,1个空间,选择=]空间所在的位置whitespace@d3vnico现在看看。它起作用了。如果有帮助,请将其标记为答案并向上投票:)