繁体   English   中英

正则表达式替换所有忽略大小写

[英]regex replace all ignore case

如何忽略以下示例中的大小写?

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

这是我的方式:

        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();
    }

似乎在我的范围内完美地工作。 按我的方式做的好处是我的解决方案中没有正则表达式,这意味着如果你想要替换括号或加号(或任何其他元字符),它实际上将替换文本实际上它的内容是,而不是正则表达式中的含义。 希望这有所帮助。

您可以在进行搜索之前将其全部转换为小写,或者查看正则表达式修饰符Pattern.CASE_INSENSITIVE

您没有指定语言。

Java有Pattern.CASE_INSENSITIVE

C#和VB有RegexOptions.IgnoreCase

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM