Comment puis-je obtenir une chaîne de caractères spécifiques? (plus précisément, obtenez "test" à partir de "A8 test")
Dans ce cas, "A8" suit un modèle comme "[A-Z] + [0-9] +" .
Il peut donc aussi s'agir de "test C6", "test X90", etc.
J'ai essayé en Python en utilisant "(? <= [A-Z] + [0-9]). +" , ce qui lève une exception:
"sre_constants.error: look-behind nécessite un motif à largeur fixe."
Cela signifie que je devrais utiliser un motif à largeur fixe tel que "(? <= [A-Z] {1} [0-9] {1})" .
Mais en fait, ce n'est pas une largeur fixe. Que puis-je faire?
5 Réponses :
Vous pouvez diviser la chaîne, puis obtenir votre chaîne.
>>> re.split(r'([A-Z]+[0-9]+ )(test)', 'A8 test') ['', 'A8 ', 'test', '']
Ou vous pouvez écrire une fonction simple pour trouver votre chaîne dans toute la chaîne en n'utilisant pas de regex.
Si vous voulez mettre le reste derrière le motif "[AZ] + [0-9] +" , vous pouvez essayer ceci:
['test'] ['123'] ['test32']
résultat:
import re
s1 = 'A8 test'
s2 = 'C6 123'
s3 = 'X90 test32'
# parentheses is what you want
p = re.compile("[A-Z]+[0-9]+ (\w+)")
print(p.findall(s1))
print(p.findall(s2))
print(p.findall(s3))
J'espère que cela vous aidera, et commentez si vous avez d'autres questions. :)
Vous pouvez utiliser un groupe de capture pour obtenir ce dont vous avez besoin.
>>> regexp = r"[A-Z]+[0-9]+ (.+)" >>> re.search(regexp, "C6 test")[1] "test" >>> re.search(regexp, "X90 test")[1] "test" >>> re.search(regexp, "CBF58456 test")[1] "test"
Notez que le modèle actuel que vous affichez reprendrait n'importe quel nombre de lettres majuscules suivies par n'importe quel nombre de chiffres, tant qu'il y en a au moins un de chaque. Notez également que mon exemple ci-dessus nécessiterait un espace entre la première partie et la chaîne de test pour capturer.
Vous pouvez également utiliser re.sub pour supprimer une partie de str dont vous n'avez pas besoin en utilisant simplement str vide comme second argument: < pré> XXX
test test test
Utilisez simplement des groupes de capture comme dans
[A-Z] + [0-9] + (. +). Prenez ici le premier groupe.