2
votes

Comment obtenir une chaîne après des lettres spécifiques?

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?


1 commentaires

Utilisez simplement des groupes de capture comme dans [A-Z] + [0-9] + (. +) . Prenez ici le premier groupe.


5 Réponses :


1
votes

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.


0 commentaires

3
votes

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. :)


0 commentaires

2
votes

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.


0 commentaires

2
votes

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


0 commentaires

2
votes
test
test
test

0 commentaires