使用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]谢谢你的建议,你的引用非常正确,但我只想学习一点正则表达式以便练习