我在这里需要一些建议。我正在创建一个应用程序来获取VB表单中的特定SQL语句,但不知道哪个是最佳选择。
例如,我有这句话来解释:
FROM sys.master_files WITH (NOLOCK)
但我需要的是
FROM sys.master_files
我需要获取FROM
以及下一个sys.master_files
这是我需要的第一时刻,它是一个基本的应用程序,只是为了捕获FROM和接下来发生的事情。
现在我一直在研究和查看已经在StackOverFlow中提出的一些问题,我想知道Regex.Match
是否是更快的方式来进行此检查,或者我是否可以使用{{ 1}}但是我不太清楚它是如何工作的。
这是我迄今为止在守则上所做的。
IndexOf
这就是我所拥有的,我试图使用IndexOf,但不能给出连续性,因为我不理解它的操作。
为了更好地理解我来自巴西,所以我将代码的对变量改为英语,以便成为" easy"理解代码。
答案 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];