#Java 7, 201 bytes String c(String s){String r="",z="e([^e]|$)";char p=0;int x;for(char c:s.toCharArray()){x=c&~32;p=x>64&x<91?p==66?'l':p>100&p<109?'e':66:c;r+=p;}return r.replaceAll("l"+z,"lt$1").replaceAll(z,"et$1");} Not really happy with it, and can certainly be golfed some more.. **Explanation:** String c(String s){ // Method with String parameter and String return-type String r="", // The return-String z="e([^e]|$)"; // Partial regex String that's used twice ('e' followed by non-'e' or nothing) char p=0; // The previous character int x; // Another temp value for(char c : s.toCharArray()){ // Loop over the characters of the input String x = c&~32; // Make every lowercase character uppercase (this returns an integer, hence the integer temp value, which is shorter than a cast to char) p = x>64 & x<91 ? // If the current character is a letter: p == 66 ? // And if the previous character is 'B': 'l' // Set the character value to 'l' : p>100&p<109 ? // Else if the previous character is either an 'e' or 'l': 'e' // Set the character value to 'e' : // Else: 66 // Set the character value to 'B' : // Else (not a letter): c; // Set the character to the current character r += p; // Append the result-String with this character } // End loop return r // Return the result-String .replaceAll("l"+z,"lt$1") // After we've replaced all occurrences of "le." with "lt." (where "." can be anything else, including nothing at the end of a line) .replaceAll(z,"et$1") // And also replaced all occurrences of "ee." with "et." (where "." can again be anything else) } // End of method **Test code:** [Try it here.](https://ideone.com/WjcpbS) class M{ static String c(String s){String r="",z="e([^e]|$)";char p=0;int x;for(char c:s.toCharArray()){x=c&~32;p=x>64&x<91?p==66?'l':p>100&p<109?'e':66:c;r+=p;}return r.replaceAll("l"+z,"lt$1").replaceAll(z,"et$1");} public static void main(String[] a){ System.out.println(c("Hello, World!")); System.out.println(c("lorem ipsum dolor sit amet.")); System.out.println(c("We praise the Goat God!")); System.out.println(c("I have a pen")); System.out.println(c("0123456789_")); System.out.println(c("0te_st1")); } } **Output:** Bleeet, Bleeet! Bleeet Bleeet Bleeet Blt Bleet. Bl Bleeeet Blt Bleet Blt! B Bleet B Blt 0123456789_ 0Bl_Bl1