0
votes

Regex, extraire mot avant et après un autre

Bonjour J'ai un problème d'extraire un mot spécifique du texte à l'aide de Regex. Lignes: xxx pré>

J'ai besoin de mot de 3 lettres comme sortie uniquement lorsque limk code> est avant ou après ce mot que je cherche, et aussi si limk est avant qu'il devrait être au début de la ligne, si son après - devrait être à la fin de la ligne. Dans cette ligne ne devrait être que des limiers et une valeur que je cherche. P>

Sortie attendue: p> xxx pré>

My Regex: P>

r'(^[0-9a-zA-Z]{3} \blimk\b)|(\blimk\b [0-9a-zA-Z]{3}$)'


8 commentaires

Essayez (? M) ^ ([0-9a-za-z] {3}) \ s + limk \ b | \ blimk \ s + ([0-9a-za-z] {3}) $ < / code>, voir Regex101.com/r/hnmlwd/1


Pourquoi pas ab2 ? Voir Cette démo


@bobble Bubble ive a édité votre regex à (? <= ^ limk \ s) [AZ \ D] {3} $ | [3} (? = \ CODE> et son travail maintenant, merci


@sysgneto tu m'adressais, non? (? <= ^ limk \ s) [A-Z \ D] {3} $ ne fonctionnera pas s'il y a 2 espaces ou plus entre limk et le mot.


Voir la Répondre avec explication et exemple de code d'utilisation.


Si vous n'acceptez pas AB2 , alors vous ne pensez que votre description doit explicitement indiquer qu'il ne peut y avoir que deux mots sur la ligne (y compris limk )?


Oui Ronald J'ai édité ma question, Sory tout pour mon erreur, j'ai oublié d'ajouter que "dans cette ligne ne devrait être que des limiers et une valeur que je cherche."


J'ai édité Ma réponse , la regex est désormais entièrement optimisée. Remarque Vous ne devez pas répéter les ancres autour du motif, utilisez une approche sèche comme je l'ai montrée.


3 Réponses :


1
votes

Est-ce que cela fait ce que vous voulez:

^ (\ w {3}) limk $ | ^ limk (\ w {3}) $

https://regex101.com/r/s1ommi/2


0 commentaires

1
votes

Vous pouvez utiliser

import re
rx = re.compile(r"^(?:limk\s+([a-zA-Z0-9]{3})|([a-zA-Z0-9]{3})\s+limk)$", re.M)
s = "limk ab1\nlimk ab2 helo\nrest helo\nab3 limk helo\nab4 limk"
print (["{}{}".format(x,y) for x,y in rx.findall(s)])
# => ['ab1', 'ab4']


1 commentaires

@Ronaldaaronson Merci, j'ai un peu échangé la logique. Corrigé la réponse.



1
votes
ab1
ab4

0 commentaires