通过正则表达式剪切文本

时间:2015-01-27 14:43:36

标签: java regex

我有这样的样本数据:

<o:-200> Text1
<o:7> Text2
<o:218> Text3
<o:325> Text4

我想做什么:

1)从标签中获取数字(-200,7等) 2)为此数字添加值(e.x. + 100) 3)用整个标签更改了数字替换

输出:

-100 Text1
107 Text2
318 Text3
425 Text4

那是我的代码:

    String s;
    Pattern p1 = Pattern.compile("<o:(-?[0-9]+)>");
    Matcher m = p1.matcher("<o:-200> ABC\n<o:7> ASDQWE\n<o:218> 12345.67\n<o:325> ASDFGD asdfsdf\n");
    StringBuffer s1 = new StringBuffer();
    while (m.find()){
        m.appendReplacement(s1, String.valueOf(100 + Integer.parseInt(m.group(1))));
    }
    s = s1.toString().replaceAll("<o:\\b(\\d+)\\b>", "$1" );
    System.out.println(s);

但我的输出是:

-100 Text1
107 Text2
318 Text3
425

但我想要全文。 ReplaceAll不起作用(更改找到第一个值的所有标签)。

我该怎么做?

1 个答案:

答案 0 :(得分:4)

查看方法Matcher.appendReplacement的文档。它包含一个清楚地显示缺少一行的示例:

while(...) {...}
m.appendTail(s1); // <- this one