J'ai des chaînes et je veux faire correspondre les caractères spéciaux (@@, $$,> XXX
Je veux suivre o / p:
@@ $$ >< .... ^
3 Réponses :
Votre expression semble très bien, mais il manque quelques éléments:
['@@', '$$', '><', '....', '^']
import re string = """ aaa@@aa;aa$$aaa;aa><aaa;aa....aaa;aaa^aa aaa@&@aa;aa$&$aaa;aa<>aaa;aa...aaa;aaaaa """ expression = r'@@|\$\$|><|\^|\.\.\.\.' matches = re.findall(expression, string) print(matches)
Si vous souhaitez explorer / simplifier / modifier l'expression, c'est expliqué dans le panneau supérieur droit de regex101.com . Si tu veux, tu peut également regarder en ce lien , comment il correspondrait contre quelques exemples d'entrées.
Vous pouvez essayer quelque chose comme ci-dessous:
>>> a='aaa@@aa;aa$$aaa;aa><aaa;aa....aaa;aaa^aa' >>> match=re.findall('@{2}|[$]{2}|><|[.]{4}|\^', a) >>> match ['@@', '$$', '><', '....', '^']
Modifier: Lorsque vous placez un caractère spécial entre crochets, il perd sa signification, par exemple, [. ]
correspondra au caractère .
.
Votre question n'est en réalité qu'une faute de frappe, car vous avez oublié d'échapper les métacaractères regex tels que $
et ^
. Mais, je suggérerais une autre approche, re.split
:
['@@', '$$', '><', '^']
L'idée ici est de diviser la chaîne sur n'importe quel groupe de caractères autre em > que ceux que vous souhaitez conserver. Le script ci-dessus s'imprime:
a = 'aaa@@aa;aa$$aaa;aa><aaa;aa....aaa;aaa^aa' parts = re.split(r'[^@$<>\^]+', a)[1:-1] print(parts)
Certains des caractères que vous voulez faire correspondre sont des métacaractères regex, ont une signification spéciale et doivent donc être échappés. Essayez:
re.findall (r '@@ | \ $ \ $ | <> | ... | \ ^', a)