J'essaie de créer une expression régulière combinée, mais je ne sais pas comment combiner les deux sous-expressions
[^\_\.]*
\.[^.]+
Existe-t-il une sorte de ET logique pour combiner les deux expressions et faire correspondre 4711.doc? À quoi ressemblerait l'expression?
Merci d'avance! Stefan
3 Réponses :
Vous pouvez utiliser des groupes pour le faire dans une seule expression régulière. Consultez ce code pour référence:
4711.doc
Production:
import re s = "4711_001.doc" match = re.search(r"(.+?)_\d+(\..+)", s) print(match.group(1) + match.group(2))
Une autre possibilité serait de faire correspondre la partie que vous ne voulez pas:
import re s = "4711_001.doc" match = re.sub(r"_\d+", "", s) print(match)
Et remplacez-le par ""
:
_\d+
Voir la démo en ligne
Pour cet exemple de chaîne 4711_001.doc , l'utilisation de [^_.]*
Et \.[^.]+
Est une correspondance assez large car elle peut correspondre à n'importe quel caractère sauf ce qui est répertorié dans la classe de caractères.
Peut-être pourriez-vous rendre le motif un peu plus spécifique, en faisant correspondre les chiffres au début et les caractères du mot comme extension.
Dans le remplacement, utilisez les groupes de capture 1 et 2, souvent désignés par $1$2
ou \1\2
[^_.]*\K_[^._]+(?=\.[^.]+$)
Il n'y a pas de langue marquée, mais si par exemple \K
est pris en charge pour effacer le tampon de correspondance, cela peut également être une option (y compris les parties que vous avez essayées)
Dans le remplacement, utilisez une chaîne vide.
(\d+)_\d+(\.\w+)
En pièces détachées
[^_.]*\K
Correspond à la partie avant le trait de soulignement, puis oubliez ce qui est mis en correspondance jusqu'à présent_[^._]+
Correspond au trait de soulignement, suivi de 1+ caractères autres que .
et _
(?=\.[^.]+$)
Une assertion d'anticipation positive pour s'assurer que ce qui est à droite est a .
suivi de tout caractère autre que a .
jusqu'à la fin de la chaîne.
Remplacez
^([^_.]+).*(\.[^.]+)$
$1$2
, voir regex101.com/r/56A0YS/1Je ne sais pas pourquoi tout le monde pense que la question concerne Python :) Quel est votre environnement de codage?
@ WiktorStribiżew Je n'avais pas réalisé que la question ne concernait pas Python avant d'avoir lu votre commentaire. J'espère que Stefan J. comprend Python.