Regex pour faire correspondre un chiffre non suivi d’un point (“.”)

J’ai une ficelle

chaîne 1 (sans les guillemets) -> “Le numéro de mon véhicule est le # 8746253, ce qui est vraiment cool”

conditions – Le nombre 8746253, peut être de n’importe quelle longueur et
– le numéro peut également être suivi immédiatement par une fin de ligne.

Je veux grouper 8746253 qui ne devrait pas être suivi d’un point “.”
J’ai essayé,

. * # (\ d +) [^.]. *

Cela me donnera le nombre à coup sûr, mais cela correspondra même s’il y a un point, car [. ^] Correspondra au dernier chiffre du nombre (par exemple, 3 dans le cas ci-dessous)

chaîne 2 (sans les guillemets) -> “la terre est # 8746253.Kms , ce qui est très loin”

Je veux faire correspondre uniquement le type de chaîne 1 et non les types de chaîne 2 .

Pour faire correspondre un nombre quelconque de chiffres après le # qui ne sont pas suivis d’un point, utilisez

 (?<=#)\d++(?!\.) 

Le ++ est un quantificateur possessif qui obligera le moteur des expressions rationnelles à ne vérifier que l'apparence (?!\.) Uniquement après le dernier chiffre correspondant, et ne reviendra pas en arrière s'il y a un point par la suite. Ainsi, toute la correspondance échouera s'il y a un dit après le dernier chiffre d'un bloc de chiffres.

Voir la démo regex

Pour faire correspondre la ligne entière et mettre les chiffres dans le groupe de capture n ° 1:

 .*#(\d++)(?!\.).* 

Voir cette démo regex . Ou une version sans lookahead:

 ^.*#(\d++)(?:[^.\r\n].*)?$ 

Voir une autre démo . Dans cette dernière version, le bloc de chiffres ne peut être suivi que d'une séquence optionnelle d'un caractère qui n'est pas un . , CR et LF suivaient avec des caractères 0+ autres que les caractères de saut de ligne ( (?:[^.\r\n].*)? ), Puis la fin de la chaîne ( $ ).

Cela fonctionne comme vous l’avez décrit

 public class MyRegex{ public static void main(Ssortingng[] args) { Pattern patern = Pattern.comstack("#(\\d++)[^\\.]"); Matcher matcher1 = patern.matcher("my car number is #8746253 which is actually cool"); if(matcher1.find()){ System.out.println(matcher1.group(1)); } Matcher matcher2 = patern.matcher("earth is #8746253.Kms away, which is very far"); if(matcher2.find()){ System.out.println(matcher1.group(1)); }else{ System.out.println("No match found"); } } } 

Les sorties:

 > 8746253 > No match found