2013-04-29 42 views
0

我是新來的正則表達式,而且我所做的閱讀沒有讓我走得足夠。我想要做的是從SQL查詢中提取行計數輸出。例如,如果以下任一示例都顯示爲輸出,則我想要捕獲'(','0','92'或任何其他數字左側的值從SQL查詢輸出中獲取/存儲行計數的正則表達式

任何正則表達式專家在那裏幫助我請

將被捕獲是從命令行中運行.sql文件輸出:!

更改數據庫上下文爲「MYDB」 -------- --- 0(1 rows affected)

將數據庫上下文更改爲'mydb'----------- 92(1 rows affected)

下面是部分工作的代碼 - 它獲得了可以修剪的前導空格的行數......只是不知道這是否是最好的代碼。

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+"); 
+2

你從哪裏獲得這些行計數?您可以直接從SQL中獲取與查詢匹配的行數,或直接在.NET中受命令影響的行數,因此不需要混淆字符串或正則表達式。告訴我們你的代碼。 – 2013-04-29 15:38:44

+1

@DourHighArch處於正確的軌道 - 正則表達式不是解決這個問題的正確方案。請參閱http://stackoverflow.com/questions/12181583/mysql-return-number-of-rows-matching-query-data – Donut 2013-04-29 18:55:19

+0

@ erman8,你能解釋你試圖達到的結果嗎?你發佈的代碼沒有意義;什麼是'sqlFileToExecute'?如果您想運行SQL文件,可以直接從命令行或快捷方式執行該操作。你爲什麼要創建一個C#程序?如果您需要從C#運行查詢,爲什麼不使用'System.Data.SqlClient.SqlCommand'?你將如何處理查詢中的「行計數輸出」?該代碼拋出了結果,所以我不明白你想要做什麼。 – 2013-04-29 21:05:55

回答

1

東西這麼簡單將工作:

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

有兩個匹配組在這裏,首先將返回你所感興趣的數量這種模式基本上任何數量的坐在一個開放的左邊匹配。托架。

這裏是代碼的用法:

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

還檢查了這一點,如果你正在學習:

Online tool for testing Regular Expressions