Как получить среднее значение в выражении регулярного выражения? - PullRequest
3 голосов
/ 10 июля 2019

Учитывая строку, я хочу получить идентификатор, найдя префикс (который является постоянным) и суффикс, который может существовать или не существовать. Вот возможные случаи, которые должны быть обработаны:

item: item_id { item_data }
item: item_id { 
    item_data
}
item: item_id
{ 
    item_data
}

В каждой ситуации я пытаюсь выбрать 'item_id'. Вот подходы, которые я сейчас пробую:

  1. Используйте item:\s*(.*) в качестве оператора регулярного выражения, затем вручную удалите все '{' и '}'. Это терпит неудачу для первого примера, который я написал выше, потому что он сохраняет item_data в операторе поиска
  2. Используйте item:\s*(.*){ в качестве оператора регулярного выражения, а затем вручную удалите скобки. Это не работает в третьем примере, где нет открывающей скобки, обозначающей конец оператора.

Что мне здесь делать? Я не могу создать оператор регулярного выражения, который может обрабатывать все три случая, не нарушая что-то еще. Я также пытался использовать item:\s*(.*){??, чтобы сделать заявление нежадным, но это не работает вообще.

1 Ответ

3 голосов
/ 10 июля 2019

item:\s*(\w+)

Пояснение: \w будет соответствовать только A-Z, a-z, 0-9 и _ (подчеркивание). В противном случае вы можете использовать [^{\s] (все, кроме пробелов и фигурных скобок) вместо \w. Как это: item:\s*([^{\s]+)

Также рассмотрите возможность изменения \w на \d или, возможно, [<your possible tokens in id>]

Результат можно проверить здесь: https://regex101.com/r/mgAYf0/1

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