J'ai plusieurs cordes qui ressemblent à ce qui suit:Quel genre de regex pourrais-je utiliser pour faire correspondre cela?
<some_text> TAG[<some_text>@11.22.33.44] <some_text>
Je veux obtenir le ip_address et seul le ip_address de cette ligne. (Dans l'intérêt de cet exemple, supposons que l'adresse IP sera toujours dans ce format xx.xx.xx.xx)
Edit: J'ai peur de ne pas avoir été clair.
Les cordes ressemblera à quelque chose comme ceci:
<some_text> TAG1[<some_text>@xx.xx.xx.xx] <some_text> TAG2[<some_text>@yy.yy.yy.yy] <some_text>
Notez que 'some_text' peut être une longueur variable. J'ai besoin d'associer différentes regex à différentes balises afin que lorsque r.group() est appelé, l'adresse IP sera retournée. Dans le cas ci-dessus, l'expression rationnelle ne serait pas différente mais c'est un mauvais exemple.
Les regex que j'ai essayés jusqu'à présent ont été inadéquats.
Idéalement, je voudrais quelque chose comme ceci:
r = re.search('(?<=TAG.*@)(\d\d.\d\d.\d\d.\d\d)', line)
où la ligne est dans le format spécifié ci-dessus. Toutefois, cela ne fonctionne pas car vous devez disposer d'une assertion look-behind de largeur fixe.
De plus, j'ai essayé des groupes non-capture en tant que tels:
r = re.search('(?<=TAG\[)(?:.*@)(\d\d.\d\d.\d\d.\d\d)', line)
Cependant, je ne peux pas utiliser cela parce que r.group() retournera [email protected]
Je comprends que r.group (1) retournera juste l'adresse IP. Malheureusement, le script que j'écris nécessite que toute mon regex renvoie le résultat correct après avoir appelé r.group().
Quel type de regex pourrais-je utiliser pour cette situation?
Le code est en python.
Note: Tous les some_text peuvent être de longueur variable
Je pense que le problème n'est pas la regex, mais que vous devez utiliser 'r.group()'. Il est probablement plus facile de se débarrasser de cette exigence; Si cela cause de tels problèmes, cela peut indiquer une erreur de conception. – Philipp