Regex: получить числа после сопоставления с поддержкой нескольких языков - PullRequest
0 голосов
/ 14 марта 2019

Ожидаемый доход / выпуск

  • Входные данные: Longines, розничные продажи Barth, Zurich, ref. 22127, движение № 5770083
  • Желаемый вывод: 5770083 Только цифры из этого я буду строить: {"Movement Number": 5770083}

Полагаю, мне нужно будет запустить несколько регулярных выражений для каждой строки, так как мне нужно знать следующее:

  • Какой заголовок относится к какой строке, например movement no.= 5770083 и т. Д.
  • Для одного и того же title будет использоваться несколько разных языков, например:
    • Вариации номера движения:
    • Движение №.
    • знаки движения. Numérotée
    • нет
    • MVT
    • драгоценности #
    • Werk-Nr.

Текущее регулярное выражение : /movement no. ([^\s]+)/ С помощью приведенного выше регулярного выражения он также получит ,.

Он также нечувствителен к регистру.

Тестовая строка

Longines. Очень тонкая и редкая водостойкая нержавеющая сталь хронограф наручные часы с черным циферблатом и оригинальной коробкой \ nSigned Longines, розничной торговли Барт, Цюрих, ref. 22127, движение № 5770083, дело №. 46, около 1941 года. 13 ZN никелированный рычаг движения, 17 драгоценности, черный циферблат с арабскими цифрами, внешняя железная дорога пять минут деления и тахиметрическая шкала, два вспомогательных циферблата с указанием регистр постоянных секунд и 30 минут, большой круговой водостойкий корпус с плоской рамкой, загнутыми ушками, винтом спина, две круглые кнопки хронографа в полосе, корпус и движение подписано изготовителем, циферблат подписано изготовителем и продавцом \ n37 мм. диам.

Test String Французский

MONTRE BRACELET D'HOMME CHRONOGRAPHE EN ИЛИ PAR PAR LONGINES \ n \ nDe forme Ronde, Le Cadran Noir A Chiffres Arabes, Cadran Auxiliaire для Les seconddes neu heures et totalisateur de минут à trois heures, движение mécanique 13 Z N, вер. 1960, пруд брют: 44,49 гр., монастырь ru или jaune 18K (750) \ n \ nCadran Longines, движение нет. 3872616, любящий де бои нет. 5872616 \ nVeuillez noter que les bracelets de montre Pouvant étre en cuirs exotiques Прованские д'Эспесские протеже, Тель-ле крокодил, иль не сон па вендус аве ле монтр ме ме сильс сонт разоблачает Avec Celles-CI. Кристи, девра пенсионер и консерватор браслеты avant leur Collecte Par Les Acheteur

Ответы [ 4 ]

2 голосов
/ 14 марта 2019

Вы можете использовать

\b((?:Movement|mouvement) no\.|mouvement signés\.Numérotée|no|MVT|jewels #|Werk-Nr\.) (\d+)

https://regex101.com/r/thL0wt/1

Начните с границы слова, затем внутри группы захвата, чередуйте все возможные фразы перед числом - затем сопоставьте пробел и запишите числовые символы в другой группе. Ваш желаемый результат будет в первой и второй группах захвата.

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);
1 голос
/ 14 марта 2019

Вы используете отрицательный класс символов [^\s]+, который соответствует всему , за исключением пробелов. Итак, если есть еще один символ, которому вы не хотите соответствовать, то есть запятая ,, добавьте его в этот класс: [^\s,].

И вы можете следовать той же логике для любого персонажа, которому вы не хотите соответствовать.

1 голос
/ 14 марта 2019

Для движения нет.в частности, вы хотите, чтобы это регулярное выражение избавлялось от запятой:

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

Что касается языков, то единственный способ, которым я могу проверить, - это набор операторов if, выполняющих соответствующий термин, который вы хотите проверить.подумайте, если только объект RegExp не допускает подстановку строк.Извините, что больше не помогаю в этой области.

0 голосов
/ 14 марта 2019
var input = "Longines, retailed by Barth, Zurich, ref. 22127, movement no. 5770083";
var output = input.match(/(?<=movement no. )\d+/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...