регулярное выражение заменить все игнорировать регистр - PullRequest
11 голосов
/ 06 апреля 2011

Как игнорировать регистр в приведенном ниже примере?

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."

Ответы [ 4 ]

23 голосов
/ 07 апреля 2011

Чтобы выполнить поиск и замену без учета регистра, вы можете изменить

outText = inText.replaceAll(word, word.replaceAll(" ", "~"));

на

outText = inText.replaceAll("(?i)" + word, word.replaceAll(" ", "~"));

Избегать разрушения исходной заглавной буквы:

InОднако при использовании вышеуказанного подхода вы разрушаете заглавную букву замененного слова.Вот лучшее предложение:

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
1 голос
/ 19 ноября 2012

Вот мой способ сделать это:

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

Кажется, работает безупречно до моей степени. Хорошая вещь в том, чтобы сделать это по-моему, в моем решении нет регулярных выражений, означающих, что если вы хотите заменить скобку или знак плюс (или любой другой метасимвол в этом отношении), это на самом деле заменит текст тем, чем он является на самом деле. есть, а не то, что это означает в регулярном выражении. Надеюсь, это помогло.

1 голос
/ 06 апреля 2011

Вы можете преобразовать все это в нижний регистр перед выполнением поиска или посмотреть на модификатор регулярного выражения Pattern.CASE_INSENSITIVE

0 голосов
/ 06 апреля 2011

Вы не указали язык.

Java имеет Pattern.CASE_INSENSITIVE

C # и VB имеют RegexOptions.IgnoreCase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...