138 votes

Expression régulière pour retourner le texte entre parenthèses

u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'

Tout ce dont j'ai besoin est le contenu à l'intérieur de la parenthèse.

1 votes

Des supports ? Je ne vois pas de parenthèses. Tu veux dire des parenthèses ?

5 votes

Pourquoi ne pas utiliser des guillemets ? Cela rendrait la chaîne plus facile à lire, par exemple u"abcde(date='2/xc2/xb2',time='/case/test.png')"

1 votes

Cette question me rend nerveux rien qu'en la regardant. Je soupçonne furtivement qu'OP vraiment veut la fonctionnalité dans ast et ne sait pas qu'il existe.

4voto

Stevie G Points 931
contents_re = re.match(r'[^\(]*\((?P<contents>[^\(]+)\)', data)
if contents_re:
    print(contents_re.groupdict()['contents'])

2voto

Pas besoin d'utiliser les regex .... Utilisez simplement le découpage en listes ...

string="(tidtkdgkxkxlgxlhxl) ¥£%#_¥#_¥#_¥#"
print(string[string.find("(")+1:string.find(")")])

1voto

Wiktor Stribiżew Points 100073

Voici plusieurs façons d'extraire des chaînes de caractères entre parenthèses dans Pandas avec la fonction \(([^()]+)\) regex (voir sa démo en ligne ) qui correspond à

  • \( - a ( char
  • ([^()]+) - puis saisit dans le Groupe 1 un ou plusieurs caractères autres que ( y )
  • \) - a ) char.

Extraction de la première occurrence en utilisant Series.str.extract :

import pandas as pd
df = pd.DataFrame({'Description':['some text (value 1) and (value 2)']})
df['Values'] = df['Description'].str.extract(r'\(([^()]+)\)')
# => df['Values']
#    0    value 1
#    Name: Values, dtype: object

Extraire (trouver) toutes les occurrences en utilisant Series.str.findall :

import pandas as pd
df = pd.DataFrame({'Description':['some text (value 1) and (value 2)']})
df['Values'] = df['Description'].str.findall(r'\(([^()]+)\)')
# => df['Values']
#    0    [value 1, value 2]
#    Name: Values, dtype: object

df['Values'] = df['Description'].str.findall(r'\(([^()]+)\)').str.join(', ')
# => df['Values']
#    0    value 1, value 2
#    Name: Values, dtype: object

Notez que .str.join(', ') est utilisé pour créer une chaîne séparée par des virgules à partir de la liste de chaînes obtenue. Vous pouvez ajuster ce séparateur en fonction de votre scénario.

0voto

fjahan Points 83

La réponse de TheSoulkiller est excellente. Dans mon cas, j'avais besoin de gérer les parenthèses supplémentaires et d'extraire uniquement le mot à l'intérieur des parenthèses. Une toute petite modification résoudrait le problème

>>> s=u'abcde((((a+b))))-((a*b))'
>>> re.findall('\((.*?)\)',s)
['(((a+b', '(a*b']
>>> re.findall('\(+(.*?)\)',s)
['a+b', 'a*b']

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