首页 > 解决方案 > 使用 replaceAll 的正则表达式出错

问题描述

我正在尝试替换这样的字符串:

ABCDEF|1.0/nAAAAAA|1.2/n

对于这样的事情,如果字符串 ABCDEF 存在:

ABCDEF|1.1/nAAAAAA|1.2/n

我正在尝试使用此正则表达式,将ABCDEF字符串作为键并totalDifference等效于1.1,但它不起作用:

text= text.replaceAll(key+"(|.*/n)", key+"|"+totalDifference+"/n");

我究竟做错了什么?

标签: javaregex

解决方案


以防万一,如果这有帮助,这里的一件事|就是没有转义,而且.*太通用了,如果你把它缩小一点,它就可以工作。在这种情况下,我假设您要替换该位置的十进制数,并且它的工作原理是这样的。

str.replaceAll(key + "(\\|[\\d.]*)", key + "|" + totalDifference)

如果您更改代码只是为了转义|,您会看到现在整个字符串都匹配了,因为.*\n它匹配直到字符串末尾的所有内容,然后您指定您只需要在这些地方的数字或点,[\\d.]*并且瞧!


推荐阅读