J'ai une chaîne qui contient le nombre de processeurs:
sqldb_gp_gen 5 fort> _2 p> Le nombre est après _gen et avant _ (le nombre 5). Comment puis-je extraire cela à l'aide de python et d'expressions régulières? P> J'essaie de le faire comme ça, mais ne recevez pas de correspondance: p> x['SLO'].extract(pat = '(?<=_Gen).*?(?:(?!_).)')
3 Réponses :
re.match code> recherche à partir du début de la chaîne. Utilisez
re.search code>
à la place et récupérez le premier groupe de capture:
Vous pouvez améliorer la recherche en recherchant uniquement des numéros au lieu de . *? Code>
Je pense que je préfère '_ gen (\ d +?) _' Code> juste pour être explicite et en vous assurant que nous obtenons au moins 1 chiffre
Merci pour les suggestions, j'étais initialement allé avec le modèle de recherche OP tel qu'il fonctionne aussi
Dans Pandas, il n'est pas nécessaire d'appeler re.search code> explicitement, il existe des méthodes vectorisées dédiées pour cela.
Vous devez utiliser < Code> série.str.Stract code> avec un motif contenant un groupe de capture: Pour ne correspond à un numéro, utilisez notes strong>: p> r'_gen (\ d + ) _ ' code>. p>
série.str.Stract code>, vous devez utiliser un groupe de capture, la méthode ne renvoie que n'importe quelle valeur si elle est capturée li>
r'_gen (. *?) _ ' code> correspondra à
_gen code>, puis capturera tous les autres caractères autres que possible les caractères de la pause, puis Match
_ code>. Si vous utilisez
\ d + code>, il ne correspondrai que 1+ chiffres. Li>
ul> p>
Oui, cela fonctionne. Merci. C'est la meilleure solution utilise des pandas.
Utiliser Re:
re.findall(r'Gen(.*)_',text)[0]
Vous pouvez utiliser lookaround
(? <= _ Gen) [^ _] + (? = _) code>