11
votes

regex remplacer tout ignore case

Comment puis-je ignorer l'affaire dans l'exemple ci-dessous? XXX PRE>

Exemple: P>

entrée: strong> p>

outText = "Retail~banking Wikipedia, the free encyclopedia Retail~banking " +
          "From Wikipedia. retail~banking industry."


2 commentaires

Je ne comprends pas pourquoi l'affaire est un problème lors du remplacement des espaces.


Oh, parce que l'espace doit être entre certains matchs insensibles. S'il n'y a pas d'option icase dans votre langue, les réfs pourraient faire cela.


4 Réponses :


0
votes

Vous n'avez pas spécifié de langue.

Java a motif.case_insensible

C # et VB ont regexoption.ignorecase


0 commentaires

1
votes

Vous pouvez convertir tout en minuscule avant de faire la recherche ou regarder un modèle de modificateur de regex.casensitive


0 commentaires

23
votes

Pour effectuer une recherche insensible à casse et remplacer, vous pouvez modifier

Sony~Ericsson is a leading company in mobile.
The company sony~ericsson was found in oct 2001


4 commentaires

Notez que sans le unicode_case ou (? u) indicateur que vous n'obtiendrez pas le cas de cas unicode approprié. Cela ne compte pas sur des données purement ASCII, mais si vous avez des lettres de boîtier non ASCII, notamment des latins comme des chiffres romains, tels que King Henry ⅷ et King Henry ⅷ , qui sont des variantes de cas les uns des autres. Un exemple facile non latin est que στιγμας , στιγμας et στιγμασ doit tous correspondre à l'autre des cas insensitativement parce qu'un sigma grec a trois formes différentes . (Et oui, je connais le pluriel de στιγμα est vraiment στιγματα . :)


@tchrist proposez-vous de remplacer "(? i) [..]" avec "(? UI) [..]"? C'est ce qui a fonctionné pour moi.


@ k3b ouais c'est ce que je voulais dire.


@Tchrist Vous venez de sauver mon temps, merci! C'est bizarre que, par défaut, Unicode Casefolding ne fonctionne pas hors de la boîte



1
votes

Voici ma façon de le faire:

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


0 commentaires