456 votes

Expression régulière insensible à la casse sans re.compile ?

En Python, je peux compiler une expression régulière pour qu'elle soit insensible à la casse en utilisant re.compile :

>>> s = 'TeSt'
>>> casesensitive = re.compile('test')
>>> ignorecase = re.compile('test', re.IGNORECASE)
>>> 
>>> print casesensitive.match(s)
None
>>> print ignorecase.match(s)
<_sre.SRE_Match object at 0x02F0B608>

Existe-t-il un moyen de faire la même chose, mais sans utiliser la fonction re.compile . Je ne trouve rien qui ressemble à l'outil Perl i suffixe (par exemple m/test/i ) dans la documentation.

3 votes

Vous trouverez une excellente introduction aux experssoins réguliers sur le site : python-course.eu/re.php

9voto

Srivastava Points 701

Pour effectuer des opérations insensibles à la casse, fournissez re.IGNORECASE

>>> import re
>>> test = 'UPPER TEXT, lower text, Mixed Text'
>>> re.findall('text', test, flags=re.IGNORECASE)
['TEXT', 'text', 'Text']

et si nous voulons remplacer le texte correspondant à la casse...

>>> def matchcase(word):
        def replace(m):
            text = m.group()
            if text.isupper():
                return word.upper()
            elif text.islower():
                return word.lower()
            elif text[0].isupper():
                return word.capitalize()
            else:
                return word
        return replace

>>> re.sub('text', matchcase('word'), test, flags=re.IGNORECASE)
'UPPER WORD, lower word, Mixed Word'

7voto

Pour une expression régulière insensible à la casse (Regex) : Il y a deux façons d'ajouter dans votre code :

  1. flags=re.IGNORECASE

    Regx3GList = re.search("(WCDMA:)((\d*)(,?))*", txt, **re.IGNORECASE**)
  2. Le marqueur insensible à la casse (?i)

    Regx3GList = re.search("**(?i)**(WCDMA:)((\d*)(,?))*", txt)

5voto

jackotonye Points 36
#'re.IGNORECASE' for case insensitive results short form re.I
#'re.match' returns the first match located from the start of the string. 
#'re.search' returns location of the where the match is found 
#'re.compile' creates a regex object that can be used for multiple matches

 >>> s = r'TeSt'   
 >>> print (re.match(s, r'test123', re.I))
 <_sre.SRE_Match object; span=(0, 4), match='test'>
 # OR
 >>> pattern = re.compile(s, re.I)
 >>> print(pattern.match(r'test123'))
 <_sre.SRE_Match object; span=(0, 4), match='test'>

3voto

Dat Nguyen Points 527

Si vous souhaitez remplacer une pièce tout en conservant le style de la pièce précédente. C'est possible.

Par exemple : mettez en surbrillance la chaîne "test asdasd TEST asd tEst asdasd".

sentence = "test asdasd TEST asd tEst asdasd"
result = re.sub(
  '(test)', 
  r'<b>\1</b>',  # \1 here indicates first matching group.
  sentence, 
  flags=re.IGNORECASE)

test asdasd TEST asd tEst asdasd

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X