Java String.replaceAll()正则表达式没有按预期运行,我做错了什么?

时间:2015-11-19 20:58:48

标签: java regex

我遇到了一个正则表达式的问题,应该简单地用一个字符串替换另一个字符串。基本上,我想转换LLC的任何大写字母变种并用LLC替换它。例如。 Llc将成为LLC。但是,就我而言,结果只是替换字符串。有一些东西应该是显而易见的,我错过了。

String pattern = "(?i)(.*?)\\b(LLC.?)\\b(.*?)";
String replacement = "LLC";
String unformatted = "Midwest Horticultural Llc";

String formatted = unformatted.replaceAll(pattern, replacement);

我的期望是格式化​​的字符串将是:

Midwest Horticultural LLC

但我最终得到的是:

LLC

如果有人能告诉我我的方式错误,我会很感激。

3 个答案:

答案 0 :(得分:1)

问题是因为您的模式中(.*?)之前和之后(LLC.?)。这意味着它将替换所有(因为您匹配任意数量的任何字符)与您的新字符串,而不仅仅是您想要的那一部分。如果删除它,它可以正常工作。

String pattern = "(?i)\\bLLC\\b";
String replacement = "LLC";
String unformatted = "Midwest Horticultural Llc";

String formatted = unformatted.replaceAll(pattern, replacement);
System.out.println(formatted);

给你" Midwest Horticultural LLC"

请记住,在进行替换时,您不需要正则表达式匹配整个String。它只查找与你的正则表达式相匹配的子串。

答案 1 :(得分:1)

如果整个字符串包含'LLC',则前导和尾随.*将导致匹配。我相信你正在寻找这个正则表达式:

String pattern = "(?i)\\bLLC\\b\\.?"; // Note the backslash before the dot
String replacement = "LLC";
String unformatted = "Midwest Horticultural Llc";

String formatted = unformatted.replaceAll(pattern, replacement);

System.out.println(formatted); // Prints "Midwest Horticultural LLC"

答案 2 :(得分:0)

这是否满足您的所有用例?

private static void replaceAll() {
        String regex = "(?i)\\b(LLC)\\b";
        String unformatted = "Midwest Horticultural Llc";
        String replacement = "LLC";

        String formatted = Pattern.compile(regex).matcher(unformatted).replaceAll(replacement);

        System.out.println(formatted);
    }