正则表达式替换标记之间的所有逗号

时间:2013-04-04 15:20:07

标签: java regex string replace

我正在尝试用java中的正则表达式替换此字符串,因为这是一个jtextArea,它可以包含很多次这个组合,

input
%fila%
Val1,val2,val3
%/fila%

output
<tr>
<th>val1</th>
<th>val2</th>
<th>val3</th>
</tr>

我没试好几次尝试

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

用一个正则表达式来完成它会非常困难,但是两个表达式会做得更好:

String test = "%fila%\nVal1,val2,val3\n%/fila%";

Pattern bracket = Pattern.compile("%([^%]+)%([^%]*)%/\\1%", Pattern.MULTILINE);
Matcher m = bracket.matcher(test);
if (m.find()) {
    String middle = m.group(2);
    String tagged = "<tr>"+
        middle
        .replaceAll("[^,\n]+", "<th>$0</th>")
        .replaceAll(",","\n")
    +"</tr>";
    System.out.println(tagged);
}

第一个表达式找到标记区域;第二个(内部replaceAll)查找单个元素,并使用<th></th>标记“框架”它们。

不幸的是,这根本不涉及嵌套:如果你将多个%fila%嵌套在一起,上面的方法就会失败。但是,如果必须允许无限制地嵌套相同的标记,则正则表达式将无法执行此操作:在这种情况下,您需要计算嵌套级别,但正则表达式语言的功能不足以进行计数。

这是demo on ideone