1
votes

recherche regex supprimer le mot

Je veux supprimer les 4 premiers mots du paragraphe

Original: Mon site 21 12 34 a 10 000 trafic

Ce que je veux résultat: a 10000 trafic

J'ai 1000 de ligne identique au paragraphe d'origine ( Mon site 21 12 34 a 10000 trafic )

j'ai code de recherche regex qui fonctionne comme ceci:

Le code ci-dessous est supprimer le premier mot de la phrase:

[0-9 ]+  = replace with space

Le code suivant supprimera tous les nombres de la ligne:

^\w+\s+(.*)  = replace with $1

Je veux combiner le code ci-dessus et faire en sorte qu'un code de recherche regex fonctionne comme je l'explique ci-dessus, mais n'affecte aucun autre mot sur la même ligne.


4 commentaires

Essayez ^ \ w + \ s [\ d \ s] + et remplacez par une chaîne vide, re.sub (r '^ \ w + \ s [\ d \ s] +', ' ', texte)


Ou essayez de supprimer 4 fois les caractères non blancs suivis d'une tabulation ou d'un espace ^ [\ t] * (?: \ S + [\ t] +) {4} regex101.com/r/CyUYh0/1


Parfait !! son travail est charmant, merci beaucoup!


regex.inginf.units.it C'est un bon outil pour construire des regex.


3 Réponses :


0
votes

Vous pouvez utiliser

import re
rx = re.compile(r"^(\w+\s)[\d\s]+")
s = "Mywebsite 21 12 34 have 10000 traffic"
print( rx.sub(r"\1", s) ) # => Mywebsite have 10000 traffic

Voir la démo regex a > un Le motif correspondra

  • ^ - début de chaîne
  • (\ w + \ s) - Groupe de capture 1: un ou plusieurs caractères de mots et un espace
  • [\ d \ s] + - 1+ espace blanc ou caractères numériques.

Démo Python :

re.sub(r'^(\w+\s)[\d\s]+', r'\1', text)

p>


2 commentaires

^ \ w + \ s [\ d \ s] + Celui-ci fonctionne parfaitement, comment pourrais-je supprimer uniquement les nombres après le premier mot exemple 21 12 34? mais seulement ces chiffres


@GayanFernando Voir la solution mise à jour, veuillez considérer l'accepter si elle fonctionne pour vous.



0
votes

Si vos lignes sont toutes exactement dans le même format, c'est-à-dire si vous devez toujours supprimer les 4 premiers mots, vous pouvez faire quelque chose comme ça qui est bien plus simple à comprendre qu'un RegEx:

# Iterate through all your lines
for line in lines:

    # Split the line string on spaces to create an array of words.
    words = line.split(' ')

    # Exclude the 4 first words and re-join the string with the remaining words.
    line = ' '.join(words[4:])


0 commentaires

0
votes

Le modèle que vous avez essayé ^ \ w + \ s + (. *) correspond à 1+ caractères de mot, 1+ caractères d'espacement et puis n'importe quel caractère sauf un retour à la ligne jusqu'à la fin de la chaîne. correspond à la chaîne entière.

Pour supprimer le premier mot et les 3 fois 2 chiffres suivants, vous pouvez utiliser:

^\s*\w+(?: \d{2}){3}\s*
  • ^ Début de chaîne
  • \ s * Correspond à 0+ caractères d'espacement
  • \ w + Correspond à 1 caractères de mot ou plus
  • (?: \ d {2}) {3} Répétez 3 fois en faisant correspondre un espace et 2 chiffres
  • \ s * Correspond à 0+ caractères d'espacement

Démo Regex | Démo Python

Notez que \ s correspond également à une nouvelle ligne . Si vous ne voulez faire correspondre que des espaces ou des tabulations, vous pouvez utiliser [\ t] à la place.


2 commentaires

Merci, ^ \ w + \ s [\ d \ s] + celui-ci fonctionne parfaitement! Mais maintenant, je veux supprimer uniquement les numéros juste après le premier mot, par exemple Mon site Web a un trafic de 10000?


En fait, après le crack (?: \ D {2}) {3} \ s * celui-ci fonctionne pour moi. parce que je veux aussi supprimer uniquement les nombres