J'ai besoin de trouver des identifiants dans une chaîne, dans les applications de médias sociaux.
comme ça:
an id: @username1 another id:@username2 not an id@username3
mon problème principal est qu'il devrait être au début du mot et s'il n'a pas d'espace devant lui, comme ce caractère: " : " (exemple: ligne deux) il sera considéré comme un identifiant
3 Réponses :
Vous pouvez essayer ceci
(?!\b\W+\b):?\s*@\w+
Fondamentalement, vous voulez capturer la chaîne (@username) qui présente soit après le optionnel :
soit un espace blanc.
cela n'a pas fonctionné, il renvoie toujours un tableau vide, (j'ai vérifié ma syntaxe, ça va)
vérifiez ceci: regex101.com/r/cjEr2i/1 les deux derniers doivent correspondre
@HamidBakhtiari vous voulez obtenir un identifiant ou un nom d'utilisateur? c'est la sortie que vous voulez ['@username', '@username'], non?
cette sortie est exactement correcte, mais l'expression régulière que vous avez envoyée ne fonctionne pas dessus!
avez-vous essayé ceci (?!\b\W+\b):?\s*@\w+
?
celui-ci fonctionne parfaitement mettre à jour votre réponse
il y a une chose: je ne voulais pas simplement dire le caractère facultatif :
je voulais dire n'importe quoi mais pas un espace ou une lettre
Essaye ça:
\B@\w+
Voir la démo
Code:
import re text = """an id: @username1 another id:@username2 not an id@username """ print(re.findall('\B@\w+', text))
Voir la démo de Python3
vérifiez ceci: regex101.com/r/rDac0w/1 le dernier ne doit pas être un identifiant car il commence immédiatement après un mot ...
les deux réponses ci-dessus fonctionnent très bien, mais j'ai trouvé un autre regex qui fonctionne:
text = '@@username1 and this: @username2 and@notusername and:@username3' res = re.findall(r'(?<!\w)@\w+', text) print(res) # ['@username1', '@username2', '@username3']
voici le code pour l'utiliser:
(?<!\w)@\w+
essayez ceci:
(?<!id)@username
voir la démo: regex101.com/r/i3idG5/1J'ai essayé ceci:
r'\b@\S+'
mais il ne répond pasQuelle est l'attente de production?
Je m'attends à ce qu'il renvoie un tableau de tous les mots qui correspondent à la condition: ['@ username1', '@ username2'] ... où les deux proviennent des lignes un et deux
Que se passe-t-il si vous avez
@#username
? Doit-il être retourné?@ dani-mesejo non il ne doit pas être revu