Определить порядок заданных c подстрок в строке через регулярное выражение - PullRequest
0 голосов
/ 12 апреля 2020

Я нигде не смог найти ответ на свой вопрос. В чем моя проблема? Я получу строку, которая состоит из 6 элементов в «некотором порядке». Например, элементы могут быть: date, ip, name, numberOfSomething >= 10, "nameOfMother" and digit. Каждый элемент - это какая-то строка, какой-то ip, et c. Мне нужно сохранить порядок этих элементов, в котором они происходят во входе. А также нужно сохранить каждый элемент в какую-то переменную. Есть ли простой способ сделать это с помощью регулярных выражений?

input: Maria 1.1.1.1 15/4/2020 124 "Ann" 6

order: [name, ip, date, numberOfSomething, "nameOfMother", digit]

name: "Maria", ip: "1.1.1.1" , ..., di git: "6"

Мне просто нужна какая-то идея или принцип, полный код не обязателен, просто фрагменты должны быть хорошими. Спасибо!

1 Ответ

0 голосов
/ 13 апреля 2020

Это моя логика c, которую я проиллюстрировал в Node.JS. Вы можете легко адаптировать это к C#.

const input = 'Maria 1.1.1.1 15/4/2020 124 "Ann" 6';

const regexList = {
  name: /[A-Z][a-z]*/,
  digit: /(?<!\S)\d(?!\S)/,
  numberOfSomething: /(?<!\S)\d{2,}(?!\S)/,
  ip: /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/,
  date: /([1-9]|[1-3][0-9])\/([1][0-2]|[1-9])\/\d{1,4}/,
  nameOfMother: /".+"/,
};

const results = [];
const resultsOrder = [];
const resultsName = {};

for ([key, value] of Object.entries(regexList)) {
  const match = value.exec(input);
  if (match) {
    results.push({
      name: key,
      value: match[0],
      index: match.index
    });
  }
}

results
  .sort((a, b) => a.index - b.index)
  .forEach(({
    name,
    value
  }) => {
    resultsName[name] = value;
    resultsOrder.push(value);
  });

console.log('Results: ', resultsName);
console.log('Order: ', resultsOrder);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...