从文件中取出一个单词然后单词。 C#

时间:2014-12-19 13:22:55

标签: c# frm

我在这里需要一些建议。我正在创建一个应用程序来获取VB表单中的特定SQL语句,但不知道哪个是最佳选择。

例如,我有这句话来解释:

  FROM sys.master_files WITH (NOLOCK)

但我需要的是

 FROM sys.master_files

我需要获取FROM以及下一个sys.master_files

这是我需要的第一时刻,它是一个基本的应用程序,只是为了捕获FROM和接下来发生的事情。

现在我一直在研究和查看已经在StackOverFlow中提出的一些问题,我想知道Regex.Match是否是更快的方式来进行此检查,或者我是否可以使用{{ 1}}但是我不太清楚它是如何工作的。

这是我迄今为止在守则上所做的。

IndexOf

这就是我所拥有的,我试图使用IndexOf,但不能给出连续性,因为我不理解它的操作。

为了更好地理解我来自巴西,所以我将代码的对变量改为英语,以便成为" easy"理解代码。

3 个答案:

答案 0 :(得分:1)

这是正则表达式的绝对任务:

var input = "FROM sys.master_files WITH (NOLOCK) FROM sys1.master_files1 WITH (NOLOCK)";
var rg = new Regex(@"FROM [a-zA-Z0-9\._]+ ");
var result = rg.Matches(input);

答案 1 :(得分:0)

如果您正在寻找正则表达式来获取该部分:

string s = System.Text.RegularExpressions.Regex.Match("test FROM sys.master_files WITH (NOLOCK)", "FROM ([^ ]*)").Groups[1].Value;

使用Linq的另一种解决方案:

string xx = "test FROM sys.master_files WITH (NOLOCK)";
string yy = xx.Split(' ').SkipWhile(x => x != "FROM").Take(2).Last();

而且我确定还有更多。

答案 2 :(得分:0)

我基于使用你的标题对问题的理解,这表明你需要字符串的前两个单词。使用IndexOf和Substring:

string original = "FROM sys.master_files WITH (NOLOCK)";
string firstTwoWords = original.Substring(0, original.IndexOf(' ', original.IndexOf(' ')+1));

应该从sys.master_files

获取

第二行的作用是它获取从索引0开始的原始字符串的一部分,并以第二次出现的空格结束。但是这对于单词之间的多个空格(偶然写入)不会很好。

所以你可以做这样的事情来处理空白空间:

    string original = "FROM sys.master_files  WITH (NOLOCK)";
    string[] array = original.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
    string newString = array[0] +' '+ array[1];