Как выбрать значения параметров заголовка после 1999 года с помощью регулярного выражения

У меня возникла проблема: я пытаюсь выбрать значения всех параметров заголовка, год которых больше 19999. Я пробовал много способов. Но это работает неправильно, показывает весь год.

Ниже это мое регулярное выражение. Но это не работает

"Title":"([^"]+?)".*?"Year":20[0-9]{2}

Мои данные JSON ниже

{
 "Data": {
   "Items": [
  {
    "Start": "2018-04-05T05:00:00Z",
    "End": "2018-04-05T05:30:00Z",
    "Title": "Indiana Jones and the Raiders of the Lost Ark",
    "Staff": {
      "Director": "Steven Spielberg",
      "Starring": "Harrison Ford"
    },
    "TimeZone": "UTC",
    "Id": "6ec29f07-c845-4967-9c87-716825265312",
    "Year": 1981,
    "IsNew": false,
    "ReadOnly": true
  },
  {
    "Start": "2018-06-29T12:00:00Z",
    "End": "2018-06-29T12:30:00Z",
    "Title": "The Lion King",
    "Staff": {
      "Director": "Roger Allers",
      "Starring": "James Earl Jones"
    },
    "TimeZone": "UTC",
    "Id": "9d54f04d-3554-4b61-8077-0cfb79cb86db",
    "Year": 1994,
    "IsNew": false,
    "ReadOnly": true
  },
  {
    "Start": "2018-06-01T08:00:00Z",
    "End": "2018-06-01T08:30:00Z",
    "Title": "Titanic ",
    "Staff": {
      "Director": "James Cameron",
      "Starring": "Leonardo DiCaprio"
    },
    "TimeZone": "UTC",
    "Id": "aa174cd4-da58-4bf9-a7a7-7ae562b584e6",
    "Year": 1997,
    "IsNew": false,
    "ReadOnly": true
  },
  {
    "Start": "2018-04-27T07:00:00Z",
    "End": "2018-04-27T07:30:00Z",
    "Title": "Ready Player One",
    "Staff": {
      "Director": "Steven Spielberg",
      "Starring": "Tye Sheridan"
    },
    "TimeZone": "UTC",
    "Id": "425b2969-8ec0-4943-93ce-c5a1aec148b0",
    "Year": 2018,
    "IsNew": true,
    "ReadOnly": false
  }
],
"From": 0,
"Portion": 0,
"TotalCount": 0
 },
  "RedirectViewModel": null,
 "ExceptionViewModel": null
 }

Я думаю, вы хотите проверить текст на наличие опечаток.

Yunnosch 22.06.2024 09:28

Каков ваш ожидаемый ответ? @Md.ИсмиэльХоссенАбир

Art Bindu 22.06.2024 12:21

Почему бы вам не использовать парсер JSON?

The fourth bird 22.06.2024 13:08

Вы действительно имели в виду год «19999» в первом абзаце?

AdrianHHH 22.06.2024 13:30

Привет @AdrianHHH, спасибо за ваш комментарий, это была ошибка при наборе. это будет 1999 год

Md. Ismiel Hossen Abir 22.06.2024 14:32

Привет @Thefourthbird, в этом проекте мне нужно использовать только регулярное выражение. Спасибо

Md. Ismiel Hossen Abir 22.06.2024 14:33

Привет @ArtBindu, мой ожидаемый ответ возвращает параметр заголовка года, который больше 1999. Спасибо.

Md. Ismiel Hossen Abir 22.06.2024 14:35

Это может привести к ошибкам regex101.com/r/q7Bu4p/1

The fourth bird 22.06.2024 14:45

Привет @Thefourthbird, да, твое решение показывает ошибку

Md. Ismiel Hossen Abir 22.06.2024 15:08

Я не знаю, что это значит. Какой язык вы используете? В чем ошибка? Каковы ожидаемые данные?

The fourth bird 22.06.2024 15:10

«В этом проекте мне нужно использовать только регулярное выражение»: по какой причине?

Casimir et Hippolyte 23.06.2024 00:05
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
3
11
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Решено с помощью кода JavaScript:

const js = {
"Data": {
    "Items": [
        {
            "Start": "2018-04-05T05:00:00Z",
            "End": "2018-04-05T05:30:00Z",
            "Title": "Indiana Jones and the Raiders of the Lost Ark",
            "Staff": {
                "Director": "Steven Spielberg",
                "Starring": "Harrison Ford"
            },
            "TimeZone": "UTC",
            "Id": "6ec29f07-c845-4967-9c87-716825265312",
            "Year": 1981,
            "IsNew": false,
            "ReadOnly": true
        },
        {
            "Start": "2018-06-29T12:00:00Z",
            "End": "2018-06-29T12:30:00Z",
            "Title": "The Lion King",
            "Staff": {
                "Director": "Roger Allers",
                "Starring": "James Earl Jones"
            },
            "TimeZone": "UTC",
            "Id": "9d54f04d-3554-4b61-8077-0cfb79cb86db",
            "Year": 1994,
            "IsNew": false,
            "ReadOnly": true
        },
        {
            "Start": "2018-06-01T08:00:00Z",
            "End": "2018-06-01T08:30:00Z",
            "Title": "Titanic ",
            "Staff": {
                "Director": "James Cameron",
                "Starring": "Leonardo DiCaprio"
            },
            "TimeZone": "UTC",
            "Id": "aa174cd4-da58-4bf9-a7a7-7ae562b584e6",
            "Year": 1997,
            "IsNew": false,
            "ReadOnly": true
        },
        {
            "Start": "2018-04-27T07:00:00Z",
            "End": "2018-04-27T07:30:00Z",
            "Title": "Ready Player One",
            "Staff": {
                "Director": "Steven Spielberg",
                "Starring": "Tye Sheridan"
            },
            "TimeZone": "UTC",
            "Id": "425b2969-8ec0-4943-93ce-c5a1aec148b0",
            "Year": 2018,
            "IsNew": true,
            "ReadOnly": false
        }
    ],
    "From": 0,
    "Portion": 0,
    "TotalCount": 0
},
"RedirectViewModel": null,
"ExceptionViewModel": null
};

// Select Titles after the Year
const fileterData = js.Data.Items.filter(x => x.Year > 1999);
console.info(fileterData.map(x => x.Title));

// alternative: js.Data.Items.filter(x => x.Year > 1999).map(x => x.Title)
Ответ принят как подходящий

Необходимый отказ от ответственности: задачи такого рода лучше всего выполнять с помощью подходящего парсера JSON.

Некоторые проблемы в вашем текущем регулярном выражении:

  • Для этого необходимо, чтобы после двоеточия не было пробела, разделяющего ключ и значение.

  • Он не ограничивает поиск приемлемого года буквальным объектом, в котором было найдено название.

  • Это позволяет году иметь более 4 цифр.

Если мы предположим, что структура JSON такая, как показано, включая порядок ключей и расположение вложенных объектов, мы могли бы сначала пропустить литерал вложенного объекта, то есть пару ключ/значение Staff, а затем искать год, но не принимать больше закрывающих скобок.

Так:

"Title":\s*"([^"]+?)"[^}]*}[^}]*"Year":\s*20[0-9]{2}\b

Обратите внимание, что ваше регулярное выражение (а также это) не допускает пустых заголовков, т. е. "", и требует, чтобы вторая цифра в году была 0. Это не было явно упомянуто в вопросе, но я предполагаю, что это то, что вы намеревался.

Почему здесь нежадный квантификатор: ([^"]+?) ?

Casimir et Hippolyte 23.06.2024 00:03

Это было в ОП. Я не менял, так как это не имеет значения.

trincot 23.06.2024 08:20

Другие вопросы по теме