OVH Cloud OVH Cloud

doc sur expressions régulières ?

4 réponses
Avatar
scott
salut les gens,

je cherche une bonne doc (avec exemples illustratifs) en FR sur les
expressions régulières...

[
ou un coup de main...
je cherche à faire un split sur une "," dans une string qui contient une
chaine de caractères délimitée par des " contenant elle-même une "," et
d'autres éléments...

chaine = "\" ceci est un test, et m....!\", test, 42"

je cherche à obtenir ça (3 éléments dans une liste) :
"ceci est un test, et m....!"
test
42

alors que j'obtiens ça (4 éléments) :
"ceci est un test"
"et m....!"
test
42
]

j'aimerai aussi apprendre comment fonctionnent les ET / OU dans les
expressions régulières...

merci les gens
scott

4 réponses

Avatar
Do Re Mi chel La Si Do
Bonsoir !

Je conseille l'ouvrage "Maîtrise des expressions régulières", chez O'Reilly
(en français).

@-salutations

Michel Claveau
Avatar
Guillaume Bouchard
scott wrote:
salut les gens,


Salut.

[
ou un coup de main...
je cherche à faire un split sur une "," dans une string qui contient une
chaine de caractères délimitée par des " contenant elle-même une "," et
d'autres éléments...

chaine = "" ceci est un test, et m....!", test, 42"


Première question, pourquoi ne pas mettre des quotes aussi autour de
test et comme cela il te suffit de faire.

liste = eval(chaine)

Bon, maitenant esseyons de regler le problème :

# -*- coding: iso-8859-1 -*-
import re

def split_fun(str):
pattern = """
( # Groupe capturant

# Disjonction de cas

(?: # Bloc non capturant
".*?[^"]"(?=[^"])
# Une suite de caractéres
# quelquonques entourés
# de simples quotes

# La simple quote final ne
# doit pas etre précédée ni
# suivie d'une autre simple
# quote (permet de mettre
# des quotes dans tes chaines

# (?=[^"]) pour ne pas matcher
# la virgule

)
|
(?: # Bloc non capturant
[^,"]+ # Une suite de plusieurs
# caractéres sans quotes
# ni virgules
)
)
"""

p = re.compile(pattern,re.X)
return p.findall(str)
#

str = "" ceci est un test"", et m....!", test, 42"
result = split_fun(str)
print len(result)
for i in result:
print i

Tu peux simplifier un petit peu si tu ne veux pas de double quotes dans
tes chaines.

Il y a surement plus simple, à toi de trouver (et de m'en faire part).

j'aimerai aussi apprendre comment fonctionnent les ET / OU dans les
expressions régulières...


Les ET/OU ?

(toto|tata) --> ou

Par contre je ne vois pas ce que tu appeles un ET ?

--
Guillaume.

Avatar
kaerbuhez
Bonsoir !

Je conseille l'ouvrage "Maîtrise des expressions régulières", chez O'Reilly
(en français).

Moi aussi, c'est excellent !

Sinon, il y a le howto (en anglais): http://www.amk.ca/python/howto/regex/

Avatar
OfTheStreet
pyparsing est bien adapte ...


scott wrote:

salut les gens,



Salut.

[
ou un coup de main...
je cherche à faire un split sur une "," dans une string qui contient
une chaine de caractères délimitée par des " contenant elle-même une
"," et d'autres éléments...

chaine = "" ceci est un test, et m....!", test, 42"



Première question, pourquoi ne pas mettre des quotes aussi autour de
test et comme cela il te suffit de faire.

liste = eval(chaine)

Bon, maitenant esseyons de regler le problème :

# -*- coding: iso-8859-1 -*-
import re

def split_fun(str):
pattern = """
( # Groupe capturant

# Disjonction de cas

(?: # Bloc non capturant
".*?[^"]"(?=[^"])
# Une suite de caractéres
# quelquonques entourés
# de simples quotes

# La simple quote final ne
# doit pas etre précédée ni
# suivie d'une autre simple
# quote (permet de mettre
# des quotes dans tes chaines

# (?=[^"]) pour ne pas matcher
# la virgule

)
|
(?: # Bloc non capturant
[^,"]+ # Une suite de plusieurs
# caractéres sans quotes
# ni virgules
)
)
"""

p = re.compile(pattern,re.X)
return p.findall(str)
#

str = "" ceci est un test"", et m....!", test, 42"
result = split_fun(str)
print len(result)
for i in result:
print i

Tu peux simplifier un petit peu si tu ne veux pas de double quotes
dans tes chaines.

Il y a surement plus simple, à toi de trouver (et de m'en faire part).

j'aimerai aussi apprendre comment fonctionnent les ET / OU dans les
expressions régulières...



Les ET/OU ?

(toto|tata) --> ou

Par contre je ne vois pas ce que tu appeles un ET ?