Remplacement de chaîne en Python
Par gawel le 04/11/2006 13:03
En Python, il y a plusieurs moyen d'y parvenir.
Catégories : autre
Modules python : re,string
Version Python : 2.3 et >
Le plus simple est d'utiliser la méthode 'replace':
>>> s = 'une chaîne'
>>> s.replace(' ',' autre ')
'une autre chaîne'
C'est facile et rapide, mais limité.
L'autre moyen est d'utiliser le module re Il permets un remplacement souple et puissant. Bien sûr, c'est plus lent. Voici la correspondance avec l'exemple précédent:
>>> s = 'une chaîne' >>> re.sub(r'\s',' autre ',s) 'une autre chaîne'
L'avantage, c'est que l'on est pas obligé de remplacer une chaîne par une autre. L'élément de remplacement peut être une fonction. Toujours pour l'exemple précédent:
>>> def sub(g): ... return ' autre ' ... >>> s = 'une chaîne' >>> re.sub(r'\s',sub,s) 'une autre chaîne'
Jusque là, on ne voit pas trop l'intérêt, je suis d'accord. L'intérêt, c'est que le module re est puissant. Voici un exemple plus complexe:
>>> html = """
... j'ai un <a href="/une_page">lien relatif</a>
... et un <a href="http://afpy.org/">lien absolu</a>. Pas cool
... """
>>>
>>> def sub(g):
... start = g.group('start')
... url = g.group('url')
... if url.startswith('/'):
... url = 'http://afpy.org%s' % url
... end = g.group('end')
... return start + url + end
...
>>> print re.sub(r'(?P<start>.*href=")(?P<url>\S+)(?P<end>".*)',sub,html)
j'ai un <a href="http://afpy.org/une_page">lien relatif</a>
et un <a href="http://afpy.org/">lien absolu</a>. Pas cool
Ca devient tout de suite plus intéressant. Non ?
Je m'arreterais la. Ce tutorial n'as pas pour vocation de vous apprendre les regexp. Si vous voulez en savoir plus, consulter la doc Python sur le module re.
A noter tout de même un soft sympa pour tester vos regexp: Kodos.








http://www.crummy.com/software/BeautifulSoup/
La doc est à
http://www.crummy.com/software/BeautifulSoup/documentation.html
et pour les exemples
http://www.crummy.com/software/BeautifulSoup/documentation.html#Applications%20that%20use%20Beautiful%20Soup