Извлечение имен столбцов из команды CREATE SQL с помощью регулярных выражений - PullRequest
0 голосов
/ 14 июня 2019

У меня есть такой sql comman:

CREATE TABLE Tablex(
  column1 INT,
  column2 TEXT,
  column3 INT,
  column4 INT,
)

эта команда CREATE является только примером, имя столбца может быть свободно выбрано. Как я могу извлечь имена столбцов через Regx в C #?

Ответы [ 2 ]

2 голосов
/ 14 июня 2019

Я предполагаю, что мы хотим захватить column1 и другие подобные столбцы, что, вероятно, это выражение может сделать так:

\s*(.+?)\s+[A-Z]+,

, если бы оно всегда было ограничено справа [A-Z]+,.

Демо 1

Другой вариант - добавить пробел после , и один перед нашими желаемыми столбцами:

\s+(.+?)\s+[A-Z]+,?\s

Демо 2

Тест

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"\s*(.+?)\s+[A-Z]+,";
        string input = @"CREATE TABLE Tablex(
  column1 INT,
  column2 TEXT,
  column3 INT,
  column4 INT,
)
";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}
0 голосов
/ 14 июня 2019

Вот еще один вариант.Я не люблю сложные регулярные выражения, которые трудно поддерживать:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication114
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "CREATE TABLE Tablex(" +
                  " column1 INT," +
                  " column2 TEXT," +
                  " column3 INT," +
                  " column4 INT," +
               ")";

            string pattern1 = @"CREATE TABLE Tablex\((?'columns'[^)]+)\)";
            Match columnsMatch = Regex.Match(input, pattern1);
            string columns = columnsMatch.Groups["columns"].Value.Trim();
            string pattern = @"\s*(?'key'[^\s]+)\s+(?'value'\w+)[,$]";

            MatchCollection matches = Regex.Matches(columns, pattern);

            foreach(Match match in matches.Cast<Match>())
            {
                Console.WriteLine("Key : '{0}', Value : '{1}'", match.Groups["key"].Value, match.Groups["value"].Value);
            }
            Console.ReadLine();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...