Bonjour J'ai un problème d'extraire un mot spécifique du texte à l'aide de Regex.
Lignes: J'ai besoin de mot de 3 lettres comme sortie uniquement lorsque Sortie attendue: p> My Regex: P> 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> r'(^[0-9a-zA-Z]{3} \blimk\b)|(\blimk\b [0-9a-zA-Z]{3}$)'
3 Réponses :
Est-ce que cela fait ce que vous voulez: p>
^ (\ w {3}) limk $ | ^ limk (\ w {3}) $ code> p> p>
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']
@Ronaldaaronson Merci, j'ai un peu échangé la logique. Corrigé la réponse.
ab1 ab4
Essayez
(? M) ^ ([0-9a-za-z] {3}) \ s + limk \ b | \ blimk \ s + ([0-9a-za-z] {3}) $ < / code>, voir Regex101.com/r/hnmlwd/1Pourquoi pas
ab2 code>? 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} $ code> ne fonctionnera pas s'il y a 2 espaces ou plus entrelimk code> et le mot.Voir la Répondre avec explication et exemple de code d'utilisation.
Si vous n'acceptez pas
AB2 code>, alors vous ne pensez que votre description doit explicitement indiquer qu'il ne peut y avoir que deux mots sur la ligne (y comprislimk code>)?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.