0
votes

Regex: obtenez des chiffres après un motif de correspondance avec support multilingue

revenu / sortie attendu

  • Entrée: Longines, détaillées par Barth, Zurich, Réf. 22127, NO. 5770083,
  • sortie souhaitée: 5770083 Seuls les chiffres de ce que je vais construire: {"Numéro de mouvement": 5770083}

    Je crois que je devrai exécuter plusieurs regexs contre chaque chaîne, car je dois connaître les éléments suivants:

    • Quel titre appartient à quelle chaîne c'est-à-dire mouvement no. = 5770083 etc
    • Plusieurs langues différentes seront utilisées pour le même titre , par exemple:
      • Numéro de mouvement Variations:
      • mouvement no.
      • Mouvement Signé.numérotée
      • non
      • MVT
      • bijoux #
      • werk-nr.

        regex actuel : / mouvement no. ([^ \ s] +) / Avec la regex ci-dessus, il récupérera également le , .

        C'est aussi insensible à la casse.

        chaîne de test

        Longines. Une très bonne et rare en acier inoxydable résistant à l'eau Bracelet de chronographe avec cadran noir et boîte d'origine \ NSIGNED Longines, détaillée par Barth, Zurich, Réf. 22127, NO. 5770083, Cas non. 46, vers 1941 \ ncal. 13 Zn Mouvement de levier au nickel, 17 bijoux, cadran noir avec chiffres arabes, chemin de fer externe cinq minutes Divisions et échelle tachymetre, deux cadrans filiales indiquant Secondes constantes et 30 minutes Inscrivez-vous dans une grande circulaire Type de type résistant à l'eau avec lunette plate, cosses rédigées, vis retour, deux boutons chronographiques ronds dans la bande, le cas et le mouvement Signé par le fabricant, cadran signé par le fabricant et le détaillant \ N37 mm. Diam.

        chaîne de test français

        Bracelet Montre d'Homme Chronographe en ou, par Longines \ n \ nde forme Ronde, Le Cadran Noir à Chiffres Arabes, Cadran Auxiliaire pour les secondes à neuf héures et totalisateur de minutes à Trois Heures, Mouvement Mécanique 13 Z N, VERS 1960, Poils Brut: 44,49 gr., Monture FR ou Jaune 18k (750) \ N \ NCADran Longines, Mouvement no. 3872616, fond de boîte no. 5872616 \ NVEUILLEZ Noter Que Les Bracelets de Montre Pouvant Être en Cuirs Exotiques Provenant d'Espèces Protégées, Tels Le Crocodile, ILS NE SON SON PAS VENDUS AVEC LES MONTRE MÊME SOLS SON SON Exposés AVEC CELLES-CI. Christie's Devra Retirer et Conséreur CES Bracelets Avant Leur Collection PAR LES ACHETEUR


5 commentaires

Merci pour le vote rapproché, puis-je avoir une petite information sur la raison pour laquelle vous pensez qu'il devrait être fermé afin que je puisse le mettre à jour avec des informations pertinentes?


Quelle est exactement la production attendue? Vous recherchez la chaîne d'entrée mais sans les chiffres après Mouvement no. et les autres variations - c'est-à-dire supprimer tous les numéros correspondants, est-ce correct?


Je pense qu'il veut le numéro basé sur la chaîne


Je vais mettre à jour la question, désolé pour la réponse floue


Mais oui, je cherche les seuls chiffres dans Mouvement no. 3872616, .


4 Réponses :


1
votes

pour le mouvement no. Spécifiquement, vous voudrez que cette regex se débarrasse de la virgule:

movement no. ([^\s\W]+)


1 commentaires

Et puis je viens de boucler à travers toutes les différentes options possibles `Mouvement NO. Mouvement SignéS.numérotée Pas de bijoux MVT # Werk-Nr.` Fondamentalement?



2
votes

Vous pouvez utiliser xxx pré>

https://regex101.com / r / thl0wt / 1 p>

Démarrez à une limite de mot, puis à l'intérieur d'un groupe de capture, alterner entre toutes les phrases possibles que vous souhaitez avant un nombre - puis correspond à un espace et de capture caractères numériques dans un autre groupe. Le résultat souhaité sera dans les premier et second groupes de capture. P>

p>

const input = `Longines. A very fine and rare stainless steel water-resistant chronograph wristwatch with black dial and original box\nSigned Longines, retailed by Barth, Zurich, ref. 22127, movement no. 5770083, case no. 46, circa 1941\nCal. 13 ZN nickel-finished lever movement, 17 jewels, the black dial with Arabic numerals, outer railway five minute divisions and tachymetre scale, two subsidiary dials indicating constant seconds and 30 minutes register, in large circular water-resistant-type case with flat bezel, downturned lugs, screw back, two round chronograph buttons in the band, case and movement signed by maker, dial signed by maker and retailer\n37 mm. diam.

MONTRE BRACELET D'HOMME CHRONOGRAPHE EN OR, PAR LONGINES\n\nDe forme ronde, le cadran noir à chiffres arabes, cadran auxiliaire pour les secondes à neuf heures et totalisateur de minutes à trois heures, mouvement mécanique 13 Z N, vers 1960, poids brut: 44.49 gr., monture en or jaune 18K (750)\n\nCadran Longines, mouvement no. 3872616, fond de boîte no. 5872616\nVeuillez noter que les bracelets de montre pouvant être en cuirs exotiques provenant d'espèces protégées, tels le crocodile, ils ne sont pas vendus avec les montre même s'ils sont exposés avec celles-ci. Christie's devra retirer et conserver ces bracelets avant leur collecte par les acheteur`;
const matches = {};
let match;
const pattern = /\b((?:Movement|mouvement) no\.|mouvement signés\.Numérotée|no|MVT|jewels #|Werk-Nr\.) (\d+)/gmi;
while (match = pattern.exec(input)) {
  matches[match[1]] = match[2];
  // or, if you only want a single object:
  const obj = {
    [match[1]]: match[2]
  };
}
console.log(matches);


8 commentaires

Réponse fantastique, merci. Une question de points bonus, je suppose que ces multiples correspondances fonctionnent exactement de la même manière que j'ai besoin de chiffres après une correspondance. Comme je dois aussi faire correspondre le numéro de cas aussi. Je voudrais simplement ajouter celles-ci à la regex et le moment va bien comprendre cela.


Je ne fais clairement pas assez de regex lol mais exec est très gentil en effet monsieur. Merci


Oui, il suffit d'ajouter No \. à la liste d'alternance


Je devrai générer le motif de procédure, mais cela ne sera pas difficile, bien que cela ne me confond pas comme ce n'est pas une chaîne.


Si vous ne pouvez pas comporter de disque, toutes les alternances, utilisez plutôt le constructeur Regexp Stackoverflow.com/Questtions/494035/...


Oui, gentil. Merci encore. Ça va être une très grande chaîne lol :)


Dernière chose de moi, j'imagine que je ne peux pas diviser ceci en plus facile pour lire le texte et mettre des choses sur de nouvelles lignes sans qu'il effectue la regex? Je suppose que je devrai utiliser la Regexp contrador si je souhaite le faire de cette façon


Si vous connaissez les alternatives à l'avance, vous pouvez mettre chaque ligne sur une nouvelle ligne en simulant le modificateur x autres moteurs ont, Comme ça . Si vous ne les connaissez pas à l'avance et que vous devez générer les phrases de manière dynamique, alors l'utilisation du constructeur est la seule option. (Assurez-vous de ESCAPE Caractères spéciaux d'abord).



0
votes
var input = "Longines, retailed by Barth, Zurich, ref. 22127, movement no. 5770083";
var output = input.match(/(?<=movement no. )\d+/)

0 commentaires

1
votes

Vous utilisez la classe de caractères annexée [^ \ s] + , qui correspond à tout sauf Whitespace. Donc, s'il y a un autre personnage que vous ne voulez pas vouloir correspondre, c'est-à-dire la virgule , , puis l'ajouter à cette classe: [^ \ s,] .

Et vous pouvez suivre la même logique pour n'importe quel caractère que vous ne voulez pas correspondre.


2 commentaires

Ah, donc le ^ est un casque ne correspond pas?


@Jamiehuttier Exactement, cela signifie que tout correspond à tout sauf ce qui est entre crochets.