2010-11-24 6 views
0

Comment trouver tout ce qui va après symols #TR= et il est à l'intérieur [ ] en utilisant re module. Par exemple #TR=[ dfgg dfgddfg dgfgf dgdgdg dfgfg ]Python. Expression régulière

+0

Attendez-vous à ce que '[]' imbrique dans votre niveau supérieur de '[]'? – martineno

Répondre

5
import re 
txt = '#TR=[ dfgg ] a kuku #TR=[ala ma kota]' 

Si vous voulez rechercher uniquement la première occurrence de ce modèle, utiliser:

matches = re.search('#TR=\[([^\]]*)\]', txt) 
if matches: 
    print(repr(matches.group(1))) 
' dfgg dfg ' 

Si vous voulez trouver toutes les occurrences dans le texte, utilisez:

matches = re.findall('#TR=\[([^\]]*)\]', txt) 
if matches: 
    print(matches) 
[' dfgg ', 'ala ma kota'] 

N'oubliez pas de vérifier si les caractères que vous recherchez ont special meaning dans les expressions régulières (par exemple [ ou ]). Si elles sont spéciales, échappez-les avec la barre oblique inverse: \[. Notez également que, par défaut, les expressions régulières sont "gourmandes", ce qui signifie qu'elles essaient d'obtenir autant de texte que possible pour correspondre au motif; donc si vous utilisez .* (ce qui signifie « correspond à tout caractère sauf retour à la ligne », details) au lieu de [^\]]* (qui signifie « match jusqu'à la ] se trouve, et arrêter avant »), trop beaucoup de texte pourrait être adapté:

matches = re.findall('#TR=\[(.*)\]', txt) 
if matches: 
    print(matches) 
[' dfgg ] a kuku #TR=[ala ma kota'] 

Vous pouvez également utiliser le modificateur « non gourmand » ? dans votre modèle, après la qualification (*, +) qui permet aux « les-moins-caractères le mieux » (correspondant à utiliser *?, +?). Le résultat pourrait être plus lisible:

'#TR=\[(.*?)\]' 

au lieu de:

'#TR=\[([^\]]*)\]' 

Il y a un excellent outil en ligne pour tester vos modèles as-you-Type: RegExr by Grant Skinner.

0

(? < = # TR = [) [^]] * (? =])

1
import re 
# compile the regex 
exp = re.compile('.*\[(.*)\].*') 
txt = r"#TR=[ dfgg dfgddfg dgfgf dgdgdg dfgfg ]" 
match = exp.match(txt) 
# grab the text between the square brackets 
result = match.group(1) 
+0

Désolé, j'ai édité votre réponse par erreur, destinée à modifier la mienne. J'ai inversé mon changement. –

Questions connexes