在具有Java正则表达式问题的组之间插入连字符

Dav*_*d M 5 java regex

我正在进行测试以查找并替换一个由3或4个大写字母组成的字符串,后跟一个带有相同字符串,连字符和相同数字的数字.在Perl中,我可以使用:

s/([A-Z]{3,4})([0-9])/$1-$2/g;
Run Code Online (Sandbox Code Playgroud)

我在Java中试过这个,硬编码如下字符串:

public class Test {
    public static void main(String[] args) {
        String test = "TEST1";

        Pattern p = Pattern.compile("([A-Z]{3,4})([0-9])");

        Matcher m = p.matcher(test);
        if (m.find()) {
            m.replaceAll(m.group(1) + "-" + m.group(2));
        }
        System.out.println(test);

    }
}
Run Code Online (Sandbox Code Playgroud)

但没有找到匹配.我的Java语法是错误的还是正则表达式问题?

anu*_*ava 3

不需要使用模式/匹配器,你可以这样做:

test = test.replaceAll( "([A-Z]{3,4})([0-9])", "$1-$2");
Run Code Online (Sandbox Code Playgroud)