J'essaye de créer une expression régulière qui sélectionne un nombre après un mot clé. Exemple de données:
Le mot-clé courant est "Contrat", après ce mot-clé, 0 à 4 caractères non numériques possibles. Puis le numéro du contrat qui est toujours entre 7 ou 8 chiffres. Lorsqu'il y a plus de chiffres, il ne doit pas être sélectionné. J'ai commencé avec (? <= Contrat) (. *) ([0-9] +) qui sélectionne trop. Je n'ai besoin que du numéro et uniquement s'il comporte 7 ou 8 chiffres.
Si vous avez une solution, pouvez-vous également expliquer comment, afin que je puisse en tirer des leçons.
le résultat devrait être
4 Réponses :
Vous pouvez utiliser un quantificateur pour spécifier le nombre de chiffres et de non chiffres et utilisez un lookahead négatif pour vérifier qu'après 7 ou 8 chiffres, il n'y a plus de chiffres après .
Pour faire correspondre toutes les variantes de contrat, vous pouvez rendre la correspondance insensible à la casse ou faire correspondre le contrat comme [Cc.,.,
(?<=\b[Cc]ontract\D{0,4})[0-9]{7,8}(?!\d)
Cela correspondra
(? Un regard positif en arrière pour affirmer que ce qui est à gauche est un contrat ou un contrat (si vous ne voulez pas utiliser un look-back, vous pouvez également faire correspondre à la place \ b [Cc] ontract ) \ D {0,4} Correspond à 0 à 4 fois pas un chiffre ([0-9] {7,8}) Capturer dans un groupe un chiffre 7 à 8 fois (?! \ d) Une anticipation négative pour affirmer que ce qui suit n'est pas un chiffre .NET prend en charge la recherche en arrière infinie. Dans ce cas, vous pouvez obtenir la correspondance en utilisant:
(?<=\b[Cc]ontract)\D{0,4}([0-9]{7,8})(?!\d)
Merci, c'est la meilleure solution. Ça marche parfaitement
@ user3507211 Vous êtes les bienvenus. N'hésitez pas à marquer la réponse comme acceptée en en cliquant sur ✓ à gauche de cette réponse et envisagez de voter pour toutes les réponses qui vous ont été utiles .
Vous pouvez utiliser cette expression régulière,
(?i)contract[^\d]{0,4}(\d{7,8})(?!\d)
Explication:
(? i) - Active la correspondance insensible à la casse comme quelque part vous avez un Contrat et d'autres contrat contrat - correspond littéralement à ce texte [^ \ d] {0,4} - Correspond à n'importe quel caractère de 0 à 4 fois sauf un chiffre (\ d {7,8}) - Correspond à un chiffre de longueur 7 à 8 (?! \ d) - Rejette la correspondance s'il y a un chiffre devant Merci pour les réponses. et plus pour les explications. Cela a aidé
Utilisation de javascript: / contract (?! (\ d {0-4})) (\ d {7,8}) (?! (\ d)) / i p >
"contrat" suivi de 0 à 4 caractères qui ne sont pas numériques ( (?! (\ d {0-4})) signifie une chaîne d'une longueur comprise entre 0 et 4 qui ne contient pas chiffres) jusqu'à ce qu'une séquence de 7 ou 8 chiffres soit trouvée ( (\ d {7,8}) ) où le symbole suivant n'est pas un chiffre ( (?! (\ d)) ). L'indicateur i signifie que l'expression régulière est insensible à la casse.
Après avoir répondu, j'ai vu que la question était liée au .net. En c #, vous pouvez utiliser le même modèle (sauf le i à la fin) et passer l'option RegexOptions.IgnoreCase .
quelle langue utilisez-vous?
(? <= contrat) \ D * (\ d {7,8}) (? = \ D)La langue est dot net. Je vais essayer de les utiliser
Ensuite, utilisez simplement
(? i) (? <= contrat \ D *) \ d {7,8} (? = \ D)< / a>