C# I';我正在尝试使用正则表达式从RichTextBox检索文本
正如标题所暗示的,我试图从richtextbox中检索某一行数字,然后将其放入一个单独的文本框中。我尝试了下面的代码,但它不想与我一起工作。这可能是错误的,可能有更简单的方法来做,但我对这件事很陌生,我会感谢所有我能在这件事上得到的帮助 我有一个名为tbPersNr的文本框 一个名为tbText的RichTextBox 一个称为btnGet的按钮C# I';我正在尝试使用正则表达式从RichTextBox检索文本,c#,regex,search,C#,Regex,Search,正如标题所暗示的,我试图从richtextbox中检索某一行数字,然后将其放入一个单独的文本框中。我尝试了下面的代码,但它不想与我一起工作。这可能是错误的,可能有更简单的方法来做,但我对这件事很陌生,我会感谢所有我能在这件事上得到的帮助 我有一个名为tbPersNr的文本框 一个名为tbText的RichTextBox 一个称为btnGet的按钮 string regPattern = @"\\d{6}-\\d{4}"; int indexOfSearch = 0;
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,那里的侦探工作做得很好,嘿嘿,很好你理解了我的意思。谢谢你们所有人,他们指出了如何正确地编写正则表达式,,,相当混乱 非常伟大 Simon
RichTextBox.Find()
不是一个正则表达式函数
改用
Regex.Match(tbText.Text,regPattern)
。除非您真的想搜索包含\
的内容,否则我认为您可能有太多反斜杠。不应该是这样吗
string regPattern = @"\d{6}-\d{4}";
字符串前面的
@
阻止反斜杠被解释,因此它们成为字符串的一部分。如果您试图使用一个正则表达式来检查6位数字,后跟一个-
,然后是4位数字,那么您的正则表达式是错误的:
@"\\d{6}-\\d{4}"
您可以使用或转义\
,但不能同时使用两者
以下哪一项都可以:
@"\d{6}-\d{4}"
"\\d{6}-\\d{4}"
此外,您正在尝试在RichTextbox
的Find
方法中使用正则表达式,该方法不接受正则表达式 看起来您打算匹配您的模式,然后将结果打印到名为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
(这是与正则表达式匹配的字符串长度)。@Simon-欢迎使用StackOverflow。然而,你的问题有几个问题。首先,你没有问任何问题。第二,您没有指定所遇到的错误和问题。这使得人们很难给出有意义的答案。“它不起作用”不是一个非常有用的情况诊断。这段代码具体做了哪些您不希望它做的事情?