java - 通过正则表达式切割文本

标签 java regex

我有这样的示例数据:

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

我想做的事:

1) 从标签中获取数字(-200、7等) 2) 给这个数字加上值(例如 + 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 不起作用(更改找到的第一个值的所有标签)。

我怎样才能做到这一点?

最佳答案

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

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

关于java - 通过正则表达式切割文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28173148/

相关文章:

Python正则表达式替换没有按我的预期工作

java - Java的CardLayout中如何获取最上面的卡片

Java 字节码检测到由 ASPECTJ 识别的方法

java - 正则表达式使用条件语句验证密码Java

python - 正则表达式:匹配同一未知子串的两次出现

python - 根据一组特定的单词拆分字符串

正则表达式在两个字符串中间查找刺痛

java - 大批量插入期间的 Cassandra DataStax Driver NoHostAvailableException

java - 与具有多个子类的 ArrayList 对象的比较器

java - 如何验证是否在模拟上调用了任何方法