J'essaie de trouver une expression régulière qui trouvera une chaîne de nombres et ne correspondra que s'ils sont précédés d'un espace blanc d'un signe dièse et suivis d'un espace blanc ou d'un saut de ligne. Par exemple, ce qui suit correspondrait :
#1234
#001234
000123
1234
Mais ce qui suit ne le ferait pas :
123-456
@1234
123kok
En utilisant l'un de ces bacs à sable regex en ligne, j'ai essayé d'utiliser un regard négatif derrière : \d*(?<=#|\s)\d{1,10}
mais je n'arrive pas à faire fonctionner ce qui suit . Donc parmi ceux-ci :
123-456
@1234
123kok
456
correspondrait
(?<=...)
est un lookbehind ( précédé de ... ), (?<!...)
est un lookbehind négatif ( non précédé de ... ). L'écriture \d*(?<=#|\s)
n'a pas de sens et se comporte comme (?<=#|\s)
seule puisqu'une même position ne peut pas être un chiffre et un #
ou un espace en même temps. Mais ce n'est pas le problème. Tout ce dont vous avez besoin est une assertion pour la condition après les chiffres : un lookahead (négatif ici).
(?<![^\s#])\d+(?!\S)
La double négation : non précédée d'un caractère qui n'est ni un espace ni un #, est utile pour inclure le début de la chaîne. Même chose pour le lookahead négatif (non suivi d'un caractère qui n'est pas un espace) pour inclure la fin de la chaîne.
Évidemment:
(?<=^|\s|#)\d+(?=\s|$)
est correct aussi mais plus long.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots