我正在尝试使用正则表达式从RichTextBox中检索文本

时间:2010-03-30 12:49:24

标签: c# regex search

由于标题暗示我正在尝试从richtextbox中检索某一行数字,然后将其放入单独的文本框中。我在下面尝试过这段代码,但它并不想和我合作。这可能是错误的,并且可能有更简单的方法,但我对这些东西都很陌生,我将非常感谢我能在这件事上得到的所有帮助。

我有一个名为tbPersNr;

的文本框

一个名为tbText的RichTextBox;

一个名为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;
    }

更新

为所有有用的答案干杯,并且抱歉表达自己非常笨拙。但我希望我在这里错误的轨道,我会尝试修复我的应用程序与一些答案。 Welbog ,,,那里有很好的侦探工作,,,呵呵呵,,好,你明白我的意思。感谢所有指出如何以正确方式编写正则表达式的人,非常混乱。

最棒的

西蒙

4 个答案:

答案 0 :(得分:0)

RichTextBox.Find() 一个RegEx-Function!

改为使用Regex.Match(tbText.Text, regPattern)

答案 1 :(得分:0)

除非您真的想要搜索包含\的内容,否则我认为您可能会有太多的反斜杠。不应该是这个吗?

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

字符串前面的@可防止解释反斜杠,因此它们会成为字符串的一部分。

答案 2 :(得分:0)

如果您尝试使用检查6位数的正则表达式,然后是-然后是4位数,那么正则表达式是错误的:

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

您可以使用string literal,也可以使用\,但不能同时使用@"\d{6}-\d{4}" "\\d{6}-\\d{4}"

其中任何一个都可以:

Find

此外,您正试图在RichTextbox的{​​{1}}方法中使用正则表达式,该方法不使用正则表达式!

答案 3 :(得分:0)

看起来像您打算匹配您的模式,然后将结果打印到名为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即可使用您已找到的startIndex11的长度(这是您的正则表达式匹配的字符串的长度) )。