Я пытаюсь использовать регулярное выражение для получения текста из RichTextBox - PullRequest
0 голосов
/ 30 марта 2010

Поскольку заголовок подразумевает, что я пытаюсь извлечь определенную строку чисел из richtextbox и затем поместить это в отдельное текстовое поле. Я попробовал этот код ниже, но он не хочет работать со мной. Возможно, это неправильно, и, возможно, есть более простые способы сделать это, но я новичок в этом, и я был бы признателен за любую помощь, которую я могу получить в этом вопросе.

У меня есть текстовое поле с именем tbPersNr;

RichTextBox с именем tbText;

Кнопка, которая называется btnGet;

    string regPattern = @"\\d{6}-\\d{4}";

    int indexOfSearch = 0;

    private void btnGet_Click(object sender, EventArgs e)
    {
        int startIndex = 0;

        if (tbText.Text.Length > 0)
        {
            startIndex = HittaPersNr(regPattern, startIndex, tbText.Text.Length); 
        }

        if (startIndex > 0)
        {
            this.tbPersNr.Text = regPattern.ToString();
        }
    }

    public int HittaPersNr(string txtToSearch, int searchStart, int searchEnd)
    {
        // Setting default value to -1.
        int retVal = -1;

        // Validating start of the search
        // om indexOfSearch = -1, slutar sökningen
        if (searchStart >= 0 && indexOfSearch >= 0)
        {
            // Validating end of search
            if (searchEnd > searchStart || searchEnd == -1)
            {
                // Searching for results in richtextbox
                indexOfSearch = tbText.Find(regPattern, searchStart, searchEnd, RichTextBoxFinds.None);

                // Validating if search resulted in any finds.
                if (indexOfSearch != -1)
                {
                    // putting index to value in the text.
                    retVal = indexOfSearch;
                }
            }
        }
        return retVal;
    }

UPDATE

Приветствую за все полезные ответы ,, и извините за то, что выразил себя довольно неуклюже. Но я ожидал, что я был не на том пути, и я постараюсь исправить свое приложение с некоторыми ответами. Welbog ,, хорошая детективная работа там ,,, хехехе ,,, хорошо, что вы поняли, что я имел в виду. Спасибо всем, кто указал, как правильно написать регулярное выражение, весьма запутанно.

Самый замечательный

Simon

Ответы [ 4 ]

0 голосов
/ 30 марта 2010

Это выглядит как , вы намереваетесь сопоставить свой шаблон, а затем распечатать результат в текстовое поле с именем tbPersNr. По крайней мере, я думаю, что этот код для:

if (tbText.Text.Length > 0)
{
  startIndex = HittaPersNr(regPattern, startIndex, tbText.Text.Length);
}

if (startIndex > 0)
{
  this.tbPersNr.Text = regPattern.ToString();
}

Но regPattern - это строка, установленная на \\d{6}-\\d{4}. Он не заменяется тем, что соответствует шаблону, что, как я полагаю, является тем, что вы ожидаете (я не могу точно сказать, но не вижу причин, почему вы печатали бы строковый литерал таким образом). Таким образом, в дополнение к пунктам, которые поднимают другие ответы, вам нужно на самом деле извлечь значение, которое вы сопоставили, из своего расширенного текстового поля, чтобы отобразить его.

Вызов Substring поможет, используя startIndex, который вы уже нашли, и длину 11 (это длина строки, совпадающая с вашим регулярным выражением).

0 голосов
/ 30 марта 2010

Если вы действительно не хотите искать что-то, содержащее \, я думаю, у вас может быть слишком много обратных слешей. Разве это не должно быть?

    string regPattern = @"\d{6}-\d{4}";

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

0 голосов
/ 30 марта 2010

Если вы пытаетесь использовать регулярное выражение, которое проверяет 6 цифр, затем следует -, а затем 4 цифры, то вы используете регулярное выражение:

@"\\d{6}-\\d{4}"

Вы либо используете строковый литерал , либо экранируете свой \, но не оба.

Любой из них в порядке:

@"\d{6}-\d{4}"
"\\d{6}-\\d{4}"

Кроме того, вы пытаетесь использовать регулярное выражение в методе Find RichTextbox, который не принимает регулярное выражение!

0 голосов
/ 30 марта 2010

RichTextBox.Find() - это , а не Функция RegEx!

Вместо этого используйте Regex.Match(tbText.Text, regPattern).

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