Comment supprimer '#'
des mots d'une chaîne qui sont suivis de '#'
et pas seulement de '#'
si est présent seul, au milieu du mot ou même à la fin.
Actuellement, j'utilise l'expression regex:
test = "# #DataScience" test = re.sub(r'\b#\w\w*\b', '', test)
pour supprimer le «#» de les mots commençant par '#'
mais cela ne fonctionne pas du tout. Il renvoie la chaîne telle quelle
Quelqu'un peut-il me dire pourquoi le "#" n'est pas reconnu et supprimé?
Exemples -
test - "# #DataScience"
Résultat attendu - "# DataScience"
Test - "kjndjk#jnjkd"
Résultat attendu - "kjndjk#jnjkd"
Test - " # #DataScience #KJSBDKJ kjndjk # jnjkd # jkzcjkh # iusadhuish # ""
Résultat attendu - "# DataScience KJSBDKJ kjndjk # jnjkd jkzcjkh # iusadhuish #"
p>
4 Réponses :
Le problème avec votre modèle est que #
n'est pas un caractère de mot, donc \ b
ne fonctionnera pas avec lui. Vous pouvez à la place utiliser un lookbehind:
test = "#HereToHelp STUFF #DataScience" print(test) test = re.sub(r'(?:(?<= )|^)#\w+\b', '', test) print(test) #HereToHelp STUFF #DataScience STUFF
@AnayPurohit Si cette réponse a résolu votre problème, envisagez de l'accepter en cliquant sur la coche verte à gauche.
Je viens de faire ça! Désolé de ne pas avoir accepté la réponse avant!
En fait, il y a encore une chose dont je suis vraiment désolé. Cette expression régulière supprime le mot entier à partir de «#», je voulais simplement supprimer le «#» et conserver la chaîne restante. Je viens de me rendre compte que ma question n'était pas correcte. je suis désolé
Votre \ b
n'est pas correctement placé.
Votre expression regex doit être:
r'#\b\w+\b'
Et aussi, le +
quantificateur signifie 1 ou plusieurs occurrences, ce qui évite d'avoir à utiliser votre \w\w*
Merci beaucoup pour l'aide! Le seul cas où cette expression régulière n'a pas fonctionné pour moi était lorsque le "#" était au milieu. Comme la sortie attendue aurait le mot entier, mais la sortie ne l'était pas. Par exemple - dans "kjndjk # jnjkd", la sortie devrait être le mot lui-même mais il a renvoyé "kjndjk".
Y a-t-il toujours des caractères après le #
?
Oui! Le mot sera toujours sytart avec un '#' et sera suivi de mots. La sortie devrait être le mot mais sans le «#» au début! Je suis vraiment désolé pour l'erreur dans ma question. Pouvez vous me donner un coup de main?
Ahhh, je suis arrivé.
Je sais qu'il y a une réponse acceptée, mais j'ai trouvé cette expression régulière qui semble bien fonctionner aussi, personnellement je préfère celle-ci car elle est plus facile à lire pour moi:
(\A|[^#\d\w])#\w\w*\b
Salut! Je vous remercie beaucoup pour votre aide! J'ai fait une erreur dans ma question. La sortie résultante doit être le mot sans le "#" à l'avant. Donc, pour tous les mots qui commencent par un «#» et un re suivi de quelques mots, la sortie doit être le mot mais sans le «#». Je suis vraiment désolé pour l'erreur dans ma question
Il convient de noter que vous pouvez changer \ w \ w *
en simplement \ w +
pour le même effet
@Anay Purohit, vous devriez mettre à jour la question avec quelques exemples de chaînes et de résultats attendus afin qu'elle soit plus facile à comprendre
@arieljuod Je viens d'ajouter des exemples basés sur vos conseils!
@Aggragoth J'apprécierais vraiment si vous pouviez m'aider!
Essayez ceci:
# DataScience KJSBDKJ kjndjk#jnjkd jkzcjkh# iusadhuish#
Résultat:
test ="# #DataScience #KJSBDKJ kjndjk#jnjkd #jkzcjkh# iusadhuish#" test = re.sub(r'(?<!\S)#(?=\S)', '', test)