/ / Remplacer les mots commençant par une barre oblique inverse en Python - python, regex, barre oblique inverse

Remplacer les mots commençant par une barre oblique inverse en Python - python, regex, backslash

Je dois supprimer les mots commençant par une barre oblique inverse d'une chaîne. J'ai essayé ce qui suit (et de légères variations) mais les mots ne sont pas supprimés.

test = "(students u2019 education, 1, 3) || (DCUCampaign 8, 2, 2) || (Projects Stories, 1, 2) || (DCU, 14, 1) || (u201c DCU graduate u201d, 1, 4)"

Voici la regex que j’ai essayé:

re.sub(r"b\w+", "", str(test))

Réponses:

1 pour la réponse № 1

Tu devrais utiliser:

re.sub(r"\w+", "", str(test))

Vous n'avez pas besoin de limite de mots b, juste une barre oblique inverse et des caractères de mot. Une limite de mot b est un personnage virtuel entre non-wordcaractères et un mot caractères, parce que exemple de caractères non-mot: espace, barre oblique inverse et quelques autres. Donc, ce que vous faisiez est de vérifier qu’un mot commence et que le mot commence par une barre oblique inverse, qui s’exclut mutuellement.


1 pour la réponse № 2

Depuis le est un caractère autre qu'un mot, pour empêcher la correspondance word dans textword, vous devez utiliser un B - une limite de non-mot qui correspond aux endroits où b ne correspond pas.

En bref: B correspond au début de la chaîne avant un caractère autre qu'un mot, ou à la fin de la chaîne après un caractère autre qu'un mot, ou entre les caractères du même type (c'est-à-dire entre bb, b1, b_, ,., etc.).

Voir plus d'explication ici, Pas un mot limite: B à rexegg.com.

Utilisation

re.sub(r"B\w+", "", str(test))
^^

Si vous devez définir la limite Unicode sans limite de mot, n'oubliez pas de passer le flags=UNICODE.


0 pour la réponse № 3

Comme plus de gens l’ont souligné dans les commentaires, c’est que u2019 est en fait une séquence d'échappement Unicode, qui sera étendue à . Cette fonctionnalité est uniquement disponible dans Python 3+. Vous pouvez la remplacer par: r"u2019". Ou en Python 2 avec u"u2019".

Mais vous remarquerez bientôt que ne remplace que ce caractère, mais si vous souhaitez remplacer tous les caractères non ascii, utilisez la regex suivante:

r"[^x00-x7F]+"

0 pour la réponse № 4

le u2019 est en fait pas u2019 mais plutôt le Right Single Quotation Mark: '

Il est encodé dans unicode et est juste un caractère.

Un autre exemple:

C'est le caractère de nouvelle ligne: n Dans votre code cela ne sera pas imprimé n mais plutôt une nouvelle ligne (comme en appuyant sur ENTRER).

Pour supprimer toutes les valeurs Unicode qui ne figurent pas dans l'espace de caractère ascii (0 à 127), utilisez le code suivant:

text = "".join([i if ord(i) < 128 else "" for i in text])

Ou si vous voulez les remplacer par un espace " ":

text = "".join([i if ord(i) < 128 else " " for i in text])

Vous pouvez également utiliser une expression rationnelle comme suit:

re.sub(r"[^x00-x7F]+", " ", text)

Remarque: x7F est 127 en hexadécimal.