正则表达式替换所有忽略大小写
如何忽略以下示例中的大小写?
outText = inText.replaceAll(word, word.replaceAll(" ", "~"));
例:
输入:
inText = "Retail banking Wikipedia, the free encyclopedia Retail banking " + "From Wikipedia. retail banking industry." word = "retail banking"
产量
outText = "Retail~banking Wikipedia, the free encyclopedia Retail~banking " + "From Wikipedia. retail~banking industry."
要进行不区分大小写的搜索和替换,您可以更改
outText = inText.replaceAll(word, word.replaceAll(" ", "~"));
成
outText = inText.replaceAll("(?i)" + word, word.replaceAll(" ", "~"));
避免破坏原始大写:
但是,在上述方法中,您将破坏替换单词的大小写。 这是一个更好的建议:
String inText="Sony Ericsson is a leading company in mobile. " + "The company sony ericsson was found in oct 2001"; String word = "sony ericsson"; Pattern p = Pattern.compile(word, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(inText); StringBuffer sb = new StringBuffer(); while (m.find()) { String replacement = m.group().replace(' ', '~'); m.appendReplacement(sb, Matcher.quoteReplacement(replacement)); } m.appendTail(sb); String outText = sb.toString(); System.out.println(outText);
输出:
Sony~Ericsson is a leading company in mobile. The company sony~ericsson was found in oct 2001
您可以在执行搜索之前将其全部转换为小写,或者查看正则表达式修饰符Pattern.CASE_INSENSITIVE
这是我的方式:
private String replaceAllIgnoreCase(final String text, final String search, final String replacement){ if(search.equals(replacement)) return text; final StringBuffer buffer = new StringBuffer(text); final String lowerSearch = search.toLowerCase(Locale.CANADA); int i = 0; int prev = 0; while((i = buffer.toString().toLowerCase(Locale.CANADA).indexOf(lowerSearch, prev)) > -1){ buffer.replace(i, i+search.length(), replacement); prev = i+replacement.length(); } return buffer.toString(); }
似乎在我的范围内完美地工作。 我这样做的好处是我的解决方案中没有正则表达式,这意味着如果你想替换一个括号或加号(或任何其他元字符),它实际上会替换它实际上的文本是,而不是正则表达式中的含义。 希望这有所帮助。
您没有指定语言。
Java有Pattern.CASE_INSENSITIVE
C#和VB有RegexOptions.IgnoreCase