Извлечение числа из определенного шаблона подстроки - PullRequest
0 голосов
/ 16 июня 2019

решаемые !Законченное использование этого, чтобы сделать то, что я хотел:

if (output.Contains("<%TABLE#"))
    {
         string pattern = @"<%TABLE#([0-9]+)%%>";
         RegexOptions options = RegexOptions.Multiline;

         foreach (Match m in Regex.Matches(output, pattern, options))
         {
               int objectID = Int32.Parse(Regex.Match(m.Value, @"\d+").Value);
               output = output.Replace(m.Value, ConvertFunction(objectID));
         }
    }

В некоторых частях моих данных SQL (представленных интерфейсом веб-сайта C # / ASP.NET) есть строки, многие из которых могут содержать образецкак <% TABLE # [NUMBER] %%> - [NUMBER] всегда является определенным идентификатором, 1+.Пример в одной строке будет выглядеть как <% TABLE # 3 %%>.Иногда в одной и той же строке может быть несколько таких шаблонов.В конечном итоге я пытаюсь сделать следующее:

  1. Найти все экземпляры в строке, где встречается шаблон
  2. Для каждого экземпляра вызвать другую функцию здания, используя #, который присутствует - этопринимает этот # и создает NewString
  3. Заменить этот экземпляр кода на NewString

Я делаю это потому, что в каждой из таблиц SQL есть страница веб-сайта, на которой отображаются данные вконечный пользователь.То, как я форматирую данные, отличается от таблицы к таблице, поэтому у меня есть класс для каждой таблицы, который создает выходную строку и возвращает ее при необходимости.Иногда мне нужно отобразить объект из другой таблицы в текущей.Чтобы попытаться решить эту проблему, я добавил приведенную выше формулу в строку, в конкретном месте, где я хочу, чтобы объект отображался, в надежде идентифицировать его и использовать идентификатор внутри, чтобы получить соответствующий объект, построить его, а затем заменитьpattern.

Я предполагаю, что мне придется использовать Regex или что-то еще, чтобы идентифицировать строку, но я изо всех сил пытаюсь найти лучший способ получить шаблон, определить число внутри него, вызвать функцию рендеринга.выходной текст с использованием указанного числа, а затем замените этот конкретный шаблон на результаты.

Ниже приведены некоторые примеры входных данных и их выходные данные.Функция ConvertFormula принимает INT и выводит STRING.

ПРИМЕР ВХОДОВ / ОЖИДАЕМЫЙ ВЫХОД

Пример 1: "Here's some data and more stuff.<%TABLE#3541%%>Here is more text. <%TABLE#31214%%>And some more."

Выход 1:"Here's some data and more stuff." + ConvertFormula(3541) + "Here is more text." + ConvertFormula(31214) + "And some more."

Пример 2: "Here's some data and more stuff! Maybe more here!<%TABLE#2%%>Here is more text."

Выход 2: "Here's some data and more stuff! Maybe more here!" + ConvertFormula(2) + "Here is more text."

Пример 3: "<%TABLE#2%%>This is something completely different with the object call at the start.<TABLE#52%%> and another here."

Выход 3: ConvertFormula(2) + "This is something completely different with the object call at the start." + ConvertFormula(52) + " and another here."

Пример 4: "There's nothing in this one, no code to find. Just has some text."

Выход 4: "There's nothing in this one, no code to find. Just has some text."

Пример 5: "This one goes on for a while, like 5132854123 characters, then has a single call right here.<%TABLE#112%%>"

Выход 5: "This one goes on for a while, like 5132854123 characters, then has a single call right here." + ConvertFormula(112)

Пример 6: "Short <%TABLE#412%%> one."

Выход 6: "Short " + ConvertFormula(412) + " one."

Пример 7: "Nothing here again."

Выход 7: "Nothing here again."

1 Ответ

0 голосов
/ 16 июня 2019

Я предполагаю, что это выражение может просто работать,

<%TABLE#([0-9]+)%%>

который мы будем использовать группу захвата и собирать наши желаемые идентификаторы.

Демо

Test

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"<%TABLE#([0-9]+)%%>";
        string input = @"<%TABLE#3%%>
<%TABLE#1213%%>";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...