Ankush Soni Ответов: 5

Извлечение подстроки из заданной строки в текстовом поле


Привет,
Я хочу извлечь подстроку из строки, которую пользователь вводит в текстовое поле в C#. Подстрока, которая мне нужна, будет находиться между введенной строкой.
Например,
если пользователь вводит "select asd,fkdl from table",
Мне нужно "asd, fkdl" в качестве подстроки.

Как мне это сделать, пожалуйста, помогите.

Что я уже пробовал:

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string x = (sender as Control).Text;
            string temp;
            listBox1.BeginUpdate();
            string str = textBox1.Text.ToString();
            int p = str.IndexOf(' ');
            int len = str.Length;
            try
            {
                for (int i = 8; str[i] != ' '; i++)
                {
                    var substr = str.Substring(8,i+1);
                    temp = substr;
                    MessageBox.Show(temp,"Substring");
                }  
}
            finally
            {
                listBox1.EndUpdate();
            }

Leo Chapiro

Если подстрока, которую вы ищете, разделена пробелами,вы можете использовать метод Split класса String.

5 Ответов

Рейтинг:
32

OriginalGriff

Используйте регулярное выражение:

string input = "select asd,fkdl from table";
Match m = Regex.Match(input, @"(?<=select\s+).+?(?=\s+from)", RegexOptions.IgnoreCase);
if (m.Success)
    {
    string substr = m.Value;
    }


Ankush Soni

Огромное спасибо!. Это сработало. :)

OriginalGriff

Пожалуйста!

Рейтинг:
21

Karthik_Mahalingam

без использования регулярных выражений

string input = "select asd,fkdl from table";
        int start = input.IndexOf("select")+6;
        var columns =  input.Substring(start, input.IndexOf("from") - start).Trim(); //"asd,fkdl"


Ankush Soni

Огромное спасибо. Просто хотел знать одну вещь,нужно ли мне все еще использовать цикл for?

Karthik_Mahalingam

не нужно никакой петли.

Ankush Soni

Спасибо.:)
Но это сработало для конкретного случая. строка вводимая пользователем варьируется или мы можем сказать что пользователи вводят его строку в текстовое поле

Karthik_Mahalingam

вы должны проанализировать несколько сценариев и код, основанный на этом.

Ankush Soni

Большое вам спасибо за основную идею. Помог разработать рабочий код для других случаев, не используя regex. :)

Karthik_Mahalingam

:)

Рейтинг:
1

CPallini

Пришло время узнать о регулярное выражение[^].


Рейтинг:
0

0x01AA

Очевидно, вам действительно нужен некоторый синтаксический анализ SQL. Это решение, возможно, излишне, с другой стороны, оно поможет вам в случае, если в будущем вы перейдете к более сложным SQL-операторам.

С TSql110Parser вы можете легко позволить разобрать SQL. Вам нужно добавить ссылку для Microsoft.SqlServer.TransactSql.ScriptDom, см. также ссылку в конце этого ответа.

private void buttonParseSQL_Click(object sender, EventArgs e)
{
    string sql = "SELECT a, b, c FROM tbl";

    // Parser
    IList<parseerror> errors;
    TSql110Parser parser = new TSql110Parser(true);
    var sqlFragment = parser.Parse(new System.IO.StringReader(sql), out errors);

    IList<tsqlparsertoken> tokenStream= sqlFragment.ScriptTokenStream;
    foreach (TSqlParserToken token in tokenStream)
    {
        // Do what you need with TSqlParserToken
        //         public int Column { get; set; }
        //         public int Line { get; set; }
        //         public int Offset { get; set; }
        //         public string Text { get; set; }
        //         public TSqlTokenType TokenType { get; set; }
        //         public bool IsKeyword();
    }
 }

Здесь вы найдете некоторую полезную информацию: Удаление комментариев из SQL | Michael J. Swart[^] Надеюсь, это поможет.