我遇到了一个正则表达式的问题,应该简单地用一个字符串替换另一个字符串。基本上,我想转换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
如果有人能告诉我我的方式错误,我会很感激。
答案 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);
}