2017-09-07 45 views
0

我试图捕获Java中行中的最后一个属性。请调整下面的代码,并帮助我找到“battr”。例如,我命名属性如“attr”和“battr”,但它可以是任何东西。需要在字符串中找到属性名称

System.out.println("<tag attr=\"val1\" battr=\"val2\"></tag>".replaceAll(".*([a-z]+\\s*=).*","$1")); 

回答

2

你可以试试这个:

System.out.println("<tag attr=\"val1\" battr=\"val2\"></tag>".replaceAll(".*(\\s([a-z])+\\s*=).*", "$1") 
      .replace("=", "").trim()); 

编辑

您可以使用正向前查找对你的要求:

System.out.println("<tag attr=\"val1\" battr=\"val2\"></tag>".replaceAll(".*((\\s|^)([a-z])+(?==)).*", "$1").trim()); 

欲了解更多信息:Lookahead and Lookbehind Zero-Width Assertions

+0

非常感谢。你能否也请调整相同的工作方式以适应下面的字符串。 attr = \“val1 \”battr = \“val2 \”> – javapsy

+0

您是否尝试了解决方案?它已经在为你提到的字符串工作了。只需添加'.replaceAll(“。*(\\ s([az])+ \\ s * =)。*”,“$ 1”)。replace(“=”,“”).trim()'字符串的结尾。 –

+0

是的正则表达式工作正常..但如果行不以字符串“<标记”开始并且只有一个属性不是以像“battr = \”val2 \“>” – javapsy

相关问题