首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >regex替换所有忽略的情况

regex替换所有忽略的情况
EN

Stack Overflow用户
提问于 2011-04-06 14:32:17
回答 4查看 23.3K关注 0票数 11

在下面的例子中,我如何忽略大小写?

代码语言:javascript
复制
outText = inText.replaceAll(word, word.replaceAll(" ", "~"));

示例:

输入:

代码语言:javascript
复制
inText = "Retail banking Wikipedia, the free encyclopedia Retail banking "
       + "From Wikipedia. retail banking industry."

word   = "retail banking"

输出

代码语言:javascript
复制
outText = "Retail~banking Wikipedia, the free encyclopedia Retail~banking " +
          "From Wikipedia. retail~banking industry."
EN

回答 4

Stack Overflow用户

发布于 2011-04-07 07:25:31

若要执行不区分大小写的搜索和替换,可以更改

代码语言:javascript
复制
outText = inText.replaceAll(word, word.replaceAll(" ", "~"));

转到

代码语言:javascript
复制
outText = inText.replaceAll("(?i)" + word, word.replaceAll(" ", "~"));

避免破坏原来的大写:

然而,在上面的方法中,您正在破坏替换单词的大写。以下是一个更好的建议:

代码语言:javascript
复制
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);

输出:

代码语言:javascript
复制
Sony~Ericsson is a leading company in mobile.
The company sony~ericsson was found in oct 2001
票数 23
EN

Stack Overflow用户

发布于 2011-04-06 14:38:49

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

票数 1
EN

Stack Overflow用户

发布于 2012-11-19 01:27:39

以下是我的做法:

代码语言:javascript
复制
        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();
    }

在我看来是完美无缺的。用我的方式来做它的好处是,在我的解决方案中没有正则表达式,这意味着如果您想替换一个括号或加号(或任何其他元字符),它实际上将取代它的实际内容,而不是它在regex中的含义。希望这能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5568081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档