Je suis très nouveau sur Python, et relativement nouveau sur regex. (Je n'ai aucune expérience Perl.)Comment améliorer ma syntaxe Python regex?
Je suis capable d'utiliser des expressions régulières d'une manière qui fonctionne, mais je ne suis pas sûr que mon code soit particulièrement Pythonien ou concis. Par exemple, si je voulais lire dans un fichier texte et imprimer le texte qui apparaît directement entre les mots «foo» et «bar» dans chaque ligne (en supposant que cela se produisait une ou zéro fois une ligne), j'écrirais ce qui suit:
fileList = open(inFile, 'r')
pattern = re.compile(r'(foo)(.*)(bar)')
for line in fileList:
result = pattern.search(line)
if (result != None):
print result.groups()[1]
Y a-t-il un meilleur moyen? Le if
est nécessaire pour éviter d'appeler groups()
sur None
. Mais je soupçonne qu'il y a une façon plus concise d'obtenir la chaîne correspondante quand il y en a une, sans lancer d'erreur quand il n'y en a pas. Je ne souhaite pas l'illisibilité Perl-like. Je veux juste accomplir cette tâche commune de la manière la plus commune et la plus simple.
Pour une raison quelconque, 'result.group (1)' capture 'foo' pour moi, mais' result.group (2) 'fonctionne. –
@FarmBoy: Parce que vous faites correspondre avec '(foo) (. *) (Bar)' au lieu de 'foo (. *) Bar'. – kennytm
L'index d'un tuple ne serait-il pas basé sur 0? Je m'attendais 'result.group (0)' retournerait 'foo' dans mon code. –