我想在文件中找到下面的字符串。实施它的最佳方法是什么?
drop%table_name
star(%
)表示你可以在drop和table_name之间使用无限制的单词
我不想逐字逐句阅读文件并处理它。
目前我正在使用richtextbox功能查找一个单词,它工作正常,但我不知道如何处理两个单词,其中一个单词在中间。请帮帮我。
我把部分代码放在一起工作正常,可以查找一个字符串。
rtb1.Text = utility.readFile(file.Path);
int index = 0;
string searchTxt = "table_name";
while (index < rtb1.Text.LastIndexOf(searchTxt))
{
rtb1.Find(searchTxt, index, rtb1.TextLength, RichTextBoxFinds.None);
rtb1.SelectionBackColor = Color.Yellow;
index = rtb1.Text.IndexOf(searchTxt, index) + 1;
}
输入样本:
drop TABLE mys u_web
/
aLter table web_cusss rename some other name;
alter table abc
/
drop TABLE mysq weation;
drop TABLE my web_quiciary /
drop TABLE web_qudetails;
alter table web_qegy_details modify v_table varchar2(200);
alter table web_ition add d_date date;
我的新代码:
foreach (AMH_FileDetails file in fileList)
{
fileIssue += file.ToString();
if (file.Type.Equals("SQL") || file.Type.Equals("TXT"))
{
string fileBody = utility.readFile(file.Path).ToUpper();
foreach (string searchTxt in splittedTblName)
{
string pattern = @"DROP (.*?) " + searchTxt;
string input = fileBody;
foreach (Match match in Regex.Matches(input, pattern, RegexOptions.IgnoreCase))
{
fileIssue += match.Value + " (drop table " + searchTxt + ") at poition" + match.Index + Environment.NewLine;
Console.WriteLine("{0} (drop table '{1}') at position {2}",
match.Value, searchTxt, match.Index);
}
pattern = @"ALTER\s*TABLE\s*" + searchTxt + "(.*?)[;/]";
input = fileBody;
foreach (Match match in Regex.Matches(input, pattern, RegexOptions.Multiline))
{
fileIssue += match.Value + " (Alter table " + searchTxt + ") at poition" + match.Index + Environment.NewLine;
Console.WriteLine("{0} (alter table '{1}') at position {2}",
match.Value, searchTxt, match.Index);
}
}
//MessageBox.Show(fileIssue);
}
rtb1.Text = fileIssue;
rtb1.SelectAll();
rtb1.Copy();
rtb1.DeselectAll();
}
答案 0 :(得分:1)
您可以使用以下正则表达式轻松完成任务:
string s = "some text drop here some words table_name another text";
var regex = new Regex(@"drop (.*?) table_name");
var match = regex.Match(s);
string words;
if (match.Success)
words = match.Groups[1].Value;
一些解释。模式drop (.*?) table_name
匹配以drop
开头的每个标记,然后匹配任何符号(由*
指定)的任何数字(由?
指定,具有ungreedy修饰符.
)直到{ {1}}。
如果匹配成功,您可以将table_name
和drop
之间的字词设为table_name
,因为我已通过指定match.Groups[1].Value
将这些符号包含在捕获组中在模式中。
您还可以从(.*?)
获取整个文本匹配模式。
有关C#中的regualr表达式的更多信息,请查看Regex Quick Reference。