Регулярное выражение для получения переменных из файла бритвы (c #) - PullRequest
1 голос
/ 04 октября 2019

Я ищу регулярное выражение, которое получает все переменные из файла Razor.

Вот пример

<p>Hello @Model.Name,</p>
<p>@Model.Text</p>
<a href="/@Model.Slug">Visit our site</a>

Я бы хотел, чтобы регулярное выражение получало все "слова", начинаяс @ Model.

В этом случае это будут @ Model.Name, @ Model.Text и @ Model.Slug

Это то, что я до сих пор придумал

"\B@Model.(\w|.)+\b"

Но я не могу получить переменную внутри тега p.

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Я бы предложил @Model\.\w+

Объяснение:

@Model - соответствует буквально @Model

\. - соответствует . буквально

\w+ - соответствует одному или нескольким символам слова

Демо

2 голосов
/ 04 октября 2019

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

\B@Model(?:\.\w+)+

См. Демоверсию regex

C #:

var results = Regex.Matches(text, @"\B@Model(?:\.\w+)+")
    .Cast<Match>()
    .Select(x => x.Value)
    .ToList();

Подробности

  • \B - граница без слов
  • @Model - буквенный текст
  • (?:\.\w+)+ - 1+ вхождений ., за которыми следует 1+ словосимволы (буквы, цифры, некоторые диакритические знаки и знаки препинания в коннекторе).

Обратите внимание, что в случае использования символов, не являющихся словами, вам необходимо заменить \w на класс символов, такой как [\w-], это будет соответствовать символам и дефисам.

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