7
votes

Besoin d'aide avec une expression régulière pour neuf chiffres alphanumériques avec une limite d'une place minimale

J'essaie de faire correspondre un CUSIP numéro. J'ai ce qui suit, mais il manque quelques cas de bord. XXX

J'ai besoin d'omettre des cordes contenant un espace au milieu et j'en ai besoin de faire correspondre les cordes qui peuvent être bordées par une autre texte. Mes cordes sont généralement entourées de onglets, mais cela peut être aussi peu qu'un espace chargeur séparant le CUSIP d'un autre texte. Merci d'avance, je suis assez vert avec regex. P.s. Je travaille dans .net

exemple

"[onglet] 123456789 [onglet]" doit être assorti (je reçois cela maintenant)

" Démontext [Tab] 123456789 [onglet] Démingext "doit être jumelé (ceci n'est pas renvoyé actuellement)

" Certains texte "ne doivent pas être retournés (je reçois actuellement ce type de match)


4 commentaires

Les matchs "certains texte" sont-ils composés de mots de 9 lettres tels que "Alphabets" ou "Puppydogs"?


Comment testez-vous vos matchs? Parce que votre regex a l'air bien et que je l'ai vérifiée avec le testeur de regex en ligne ( gskinner.com/regexr ) et il Correspond à vos chaînes de test correctement


@San u ils pourraient, mais aussi souvent, ils sont des cordes avec des espaces internes. J'utilisais Regexpal.com pour vérifier les matchs, et ils étaient inclus.


Regexr frappe le cul de Regexpal BTW, merci pour cela.


4 Réponses :


2
votes
string haystack = "some 123456789 text";//single space separators

string haystack2 = "some\t123456789\ttext";//tab separators

// The comment is correct, your pattern was correct originally.  
// This is just slightly dressed up.
string pattern = @"(\s+)(?<cusip>[A-Za-z0-9]{9})(\s+)";

Match m = Regex.Match(haystack, pattern);

Console.WriteLine("Match for cusip surrounded by spaces:" + m.Groups["cusip"]);
//Output: Match for cusip surrounded by spaces:123456789

Match m2 = Regex.Match(haystack2, pattern);

Console.WriteLine("Match for cusip surrounded by tabs:" + m2.Groups["cusip"]);
//Output: Match for cusip surrounded by tabs:123456789

1 commentaires

Cela a également été très utile, mais ce qui est ci-dessous, c'était une réponse qui a également montré comment ma question aurait pu être meilleure. Merci encore pour votre aide!



6
votes

Selon Cette page, non seulement 9- Le chiffre alphanumérique est un CUSIP valide. Les trois premiers caractères ne peuvent être que des chiffres, et le neuvième est une somme de contrôle, donc si vous souhaitez distinguer les cuscules des autres chaînes de 9 caractères, je pense que cela devrait fonctionner mieux: xxx pré>

ou, si Vous souhaitez également faire correspondre les chaînes bordées par le début ou la fin de l'entrée: p> xxx pré>

ou, si vous souhaitez également faire correspondre les chaînes bordées de la ponctuation (telle que " (100Abcdef) ": p>

(^|[^a-zA-Z0-9])[0-9]{3}[a-zA-Z0-9]{6}([^a-zA-Z0-9]|$)


0 commentaires

0
votes
    public Boolean CusipValidation(string sCusip)
    {
        string Cusippattern = @"^([0-9]){3}([a-zA-Z0-9]){6}$";

        if (!System.Text.RegularExpressions.Regex.IsMatch(sCusip, Cusippattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase) && sCusip != string.Empty)
            return false;
        else
            return true;
    }

0 commentaires

5
votes

Les autres réponses sont erronées, ne prenant pas compte des PPN et de permettre le chèque chiffre être une lettre. Par conséquent, voici une meilleure solution.

basé sur Ce document et Ce document , les CUSIPS ont les règles suivantes: < ul>

  • La longueur est de 9 caractères.
  • Les caractères 1, 2, 3 sont chiffres .
  • Les caractères 4, 5, 6, 7, 8 sont soit lettres ou chiffres .
  • caractères 6, 7, 8 peut aussi être être * , @ , # . .
  • le caractère 9 est un chèque chiffre .

    Dans cet esprit, la regex suivante doit fournir une correspondance sertie: xxx

    vous pouvez jouer avec elle ici .

    Notez que cela est aussi serré que possible sans plonger dans trop de détails, ce qui transformerait l'expression dans un monstre. Je vous suggère d'utiliser l'algorithme de chèques du chiffre pour valider complètement le CUSIP, que vous pouvez trouver ici .


  • 1 commentaires

    C'est génial, mais souvent le chiffre de contrôle est omis auquel cas l'une de ces solutions peut ne pas reconnaître un CUSIP valide. Dans mon cas, j'ai simplement fait le chiffre de contrôle en option ^ [0-9] {3} [A-ZA-Z0-9] {2} [A-ZA-Z0-9 * @ #] {3} [0-9]? $