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...
Je conseille l'ouvrage "Maîtrise des expressions régulières", chez O'Reilly (en français).
@-salutations
Michel Claveau
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.
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 ?
[ 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.
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/
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/
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/
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 ?
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 ?
[ 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 ?