Задать вопрос

Regex C#. Как вытащить значения из текста?

Имеем richTextBox с текстом (любой код на c++/c#). Необходимо из него вытащить оглашение переменных в dataGridView. Нужно находить совпадения вида тип_переменной имя_переменной = значение_переменной; или тип_переменной имя_переменной; и разбивать на 3 или 2 части для того, чтобы, соответственно, занести в 3 колонки dataGridView. Помогите, пожалуйста, с написанием регулярных выражений.
  • Вопрос задан
  • 3995 просмотров
Подписаться 2 Оценить 2 комментария
Решения вопроса 2
dima_horror
@dima_horror
Matches mm = Regex.Matches(input, @"(byte|sbyte|short|ushort|int|uint|long|ulong|float|double|decimal|char|string|bool|object|var)\s+([a-zA-Zа-яА-Я]{1}[^\s;]*)(\s+=\s+['""]?([\s\S]+?)['""]?)?;");

Пробуйте...
Ответ написан
Мне, в своё время, очень помог вот этот бесплатный конструктор регулярных выражений: Expresso и эта статья. Для описанной вами задачи - должно хватить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Для C# хороший вариант - Roslyn

class Program {
   static void Main(string[] args) {
            	
   SyntaxTree tree = SyntaxTree.ParseText(
            @"using System;
 
             namespace HelloWorld    {
               class Program  {
                 static void Main(string[] args)  {
                    var i = 10 * 20;
                    String s = t.ToString();
                    }
                 }
              }");
  var comp = Compilation.Create("HelloWorld")
     .AddReferences(MetadataReference.CreateAssemblyReference("mscorlib"))
     .AddSyntaxTrees(tree);
            
  var model = comp.GetSemanticModel(tree);

  new Walker(model).Visit(tree.GetRoot());

  Console.ReadKey();
}

class Walker : SyntaxWalker {
   private readonly SemanticModel model;

   public Walker(SemanticModel model) : base() {
     this.model = model;
    }

    public override void VisitVariableDeclarator(VariableDeclaratorSyntax node) {
      var declaredSymbol = (LocalSymbol) model.GetDeclaredSymbol(node);
      Console.WriteLine("{0} {1} {2}", declaredSymbol.Type, declaredSymbol.Name,         node.Initializer.GetText());
   }
 }
Ответ написан
pushthebutton
@pushthebutton
Хм, огласите весь список. То есть приведите кусочек того, что надо парсить.
Быть может что вы копаете не в ту сторону.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы