使用java正则表达式提取值

使用java正则表达式提取值,java,regex,Java,Regex,我从正则表达式开始,希望从如下字符串中提取值 String test="[ABC]Name:User:Date: Adresse "; 我想提取姓名,用户,日期和地址 我可以用substring和split完成这个技巧 String test = "String test="[ABC]Name:User:Date: Adresse "; String test2= test.substring(5,test.length()); System.out.print

我从正则表达式开始,希望从如下字符串中提取值

String test="[ABC]Name:User:Date: Adresse ";
我想提取姓名,用户,日期和地址 我可以用substring和split完成这个技巧

String test = "String test="[ABC]Name:User:Date: Adresse ";
        String test2= test.substring(5,test.length());
        System.out.println(test2);
        String[] chaine = test2.split(":");
        for(String s :chaine)
        {
            System.out.println("Valeur " + s);
        }
但我想试试正则表达式,是的

pattern = Pattern.compile("^[(ABC)|:].");
但它不起作用

你能帮我吗


非常感谢

您必须避开
[
]
就是一个有效的例子

注意,在正则表达式变得复杂的情况下,代码可能比正则表达式更容易维护

有些人在遇到问题时会想:“我知道,我会用 正则表达式。“现在他们有两个问题。”杰米·扎温斯基

String#split
确实是完成您想要做的事情的最佳方式。话虽如此,使用regex,以下内容将为您提供相同的输出:

    Pattern p = Pattern.compile("^(?:\\[ABC\\])([^:]+):([^:]+):([^:]+):([^:]+)$");
    Matcher m = p.matcher(test);
    while (m.find()) {
        System.out.println("Valeur " + m.group(1)); // Name
        System.out.println("Valeur " + m.group(2)); // User
        System.out.println("Valeur " + m.group(3)); // Date
        System.out.println("Valeur " + m.group(4)); // Address
    }

好的,谢谢你的帮助,但是如果我想否定[ABC]以获得唯一的名称,我该怎么做呢?不确定你要求什么,但我已经更新了代码,以便每个组都将映射到原始字符串中的单个元素。基本上,当您使用
()
包装表达式时,您可以捕获该组,稍后可以使用
匹配器
获取该组。非常感谢!它工作得很好,但是正则表达式变得更复杂了。我需要练习,所以我将阅读一些关于正则表达式的教程。顺便说一句,再次感谢你!您还将捕获空的空间。在本例中,地址周围有一些空格,我想您可能希望消除这些空格。您可以使用
:\s*([^::]+)\s*$
修复它。它仍然保留地址中的空格。另外,我对这个例子有点模糊:它是从[ABC]开始的,还是包括了所有其他的。如果是后者,则开始和结束$会变得复杂。好的,谢谢你,我会根据你的建议更新代码。是的,我的字符串以[ABC]开头,这里有一个例子[ABC]STRUTS:PAUL:25/06/2011T10H12:8 Pierre de Coubertin 95300 Pontoise”。我必须提取以下值:“没有[ABC]谢谢你的建议,你的引用非常正确,但我只想学习一点正则表达式以便练习