-2

I need a help in regular expression, I am trying to replace "Inc" with "LLC" for many string.

I used this code in java :

String newValue = newValue.replaceAll("(?i)Inc[^\\w]","LLC");

But the result is incorrect, one char is removed after replacing :

Exp: CONSULTANTS, INC. ("ABC") ==> CONSULTANTS, LLC ("ABC") // the "." was removed.

Please note that i have used [^\w] to prevent replacing "inc" in sentences like "include".

Aniket Sahrawat
  • 12,410
  • 3
  • 41
  • 67
Kamilia
  • 195
  • 1
  • 2
  • 13

1 Answers1

8

You can use \b for word boundaries if there is no special literals in the string like ^ or ():

String s = "include inc".replaceAll("(?i)\\binc\\b", "LLC");
System.out.println(s); // (?i) is for case insensitive.

Above approach would fail if you use special characters in place of inc like ^inc. You can use Pattern.quote(s) for it to work.

If there are special characters then you can use quoted literals \Q...\E. Utility method using quoted literals:

public static String replaceExact(String str, String from, String to) {
    return str.replaceAll("(?<!\\w)\\Q" + from + "\\E(?!\\w)", to);
}

Note: Pattern.quote("wor^d") will return \\Qwor^d\\E which is same as above regex.

Aniket Sahrawat
  • 12,410
  • 3
  • 41
  • 67