0

我是正则表达式的新手,我所做的阅读并没有让我走得足够远。我要做的是从 SQL 查询中提取行计数输出。例如,如果下面的任何一个示例作为输出出现,我想捕获 '(' 左侧的值,因此是 '0'、'92' 或任何其他数字。

任何正则表达式专家都可以帮助我吗?

将捕获的输出来自从命令行运行 .sql 文件:

将数据库上下文更改为“mydb”。------------ 0(1行受影响)

将数据库上下文更改为“mydb”。----------- 92(1 行受影响)

这是部分工作的代码 - 它使用可以修剪的前导空格来获取行数......只是不知道这是否是最好的代码。

Process execQuery = new Process();
string output = "";    
string argumentsToPass = "-S myhost -d mydb -i + sqlFileToExecute;

execQuery.StartInfo.UseShellExecute = false;
execQuery.StartInfo.RedirectStandardOutput = true;
execQuery.StartInfo.FileName = "sqlcmd";
execQuery.StartInfo.Arguments = argumentsToPass;
execQuery.Start();
execQuery.WaitForExit();
output = execQuery.StandardOutput.ReadToEnd();

Match match = Regex.Match(output, @"\s+\d+");
4

2 回答 2

1

像这样简单的东西会起作用:

(\d{1,})(\()

这里有两个匹配组,第一个将返回您感兴趣的数字。此模式基本上匹配位于左括号左侧的任何数字。

这是代码中的用法:

regex.match(myOutputString, "(\d{1,})(\()").groups(1).tostring

如果您正在学习,请查看此内容:

用于测试正则表达式的在线工具

于 2013-04-29T15:48:59.780 回答
0

对于某些方向,我喜欢这个 c# 正则表达式表http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet

用简单的英语来说,你的目标应该是找到最后一个连字符 (-),然后抓住任何数字,直到你看到一个开放的括号。

祝你好运!

于 2013-04-29T15:33:22.573 回答