J'ai une chaîne. Je veux extraire la sous-chaîne qui commence par un numéro et se termine par un numéro dans cette sous-chaîne.
ma chaîne est j'ai essayé avec le modèle ci-dessous
attendu O / P = "05/24/2019 04:33 582 ATM1. py " code> p> ^ \ d. + \ s + \ d $ code> p> "05/24/2019 04h33 582 " code>
Réel o / p = la chaîne entière que je reçois. P> p>
3 Réponses :
Un modèle très sensible: ou utilisez: p> sortie: p>
@Sam le second
". + \ s +" code> n'est pas un modèle valide car il prendra un caractère initial, non seulement un nombre tel que spécifié, et ne terminera pas dans le dernier espace, pas dans un nombre tel que spécifié.
Essayez la regex suivante: répartition de regex:
1. sorties: Démo P> P> "\ d [\ d \ s: APM /] * \ d" code> \ d code>: un caractère décimal (0-9)
2. [\ d \ s: APM /] * code>: le * code> signifie n'importe quel nombre de caractères à l'intérieur des crochets. À l'intérieur des crochets, nous avons \ d code> pour les décimales (0-9), \ s code> pour les espaces et : APM / code> pour ces caractères littéraux (: code> pour l'heure, APM code> pour AM et PM, et / code> pour la date).
3. \ d code>: un caractère décimal (0-9) p> 05/24/2019 04:33 582 Code> P>
Si vous souhaitez obtenir une sous-chaîne qui commence par le premier numéro en tant que mot entier et se termine par le dernier numéro dans l'ensemble à partir d'une chaîne plus longue, vous pouvez utiliser
import re
i="05/24/2019 04:33 PM 582 atm1.py"
m = re.search(r'\b\d+\b.*\b\d+\b', i)
if m:
print(m.group()) # => 05/24/2019 04:33 PM 582
Vous n'obtenez pas la chaîne entière ...
\ d $ code> ne correspondrait pas dans votre cas car la chaîne ne se termine pas avec un chiffre, vous obtenez ainsiAucun code> comme correspondance. Votre entrée ou votre regex est différente de ce que vous avez montré ici.