1
votes

Regex n'identifie pas «#» pour la suppression

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>


0 commentaires

4 Réponses :


0
votes

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 


3 commentaires

@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é



0
votes

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*


4 commentaires

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é.



0
votes

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


5 commentaires

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!



1
votes

Essayez ceci:

# DataScience KJSBDKJ kjndjk#jnjkd jkzcjkh# iusadhuish#

Résultat:

test ="# #DataScience #KJSBDKJ kjndjk#jnjkd #jkzcjkh# iusadhuish#"
test = re.sub(r'(?<!\S)#(?=\S)', '', test)


0 commentaires