2014-01-20 44 views
0

我在Match m = Regex.Match之後沒有輸出。我認爲它有一個問題。有人可以檢查代碼,如果可以的話。使用匹配正則表達式時沒有輸出

輸入alarm_text樣子:

PRIO 1個WESTERSTRAAT 140 ENKHUIZEN Woning品牌4632 4651

我想要做的是分割字符串中四組: 「PRIO 1」,「 WESTERSTRAAT 140 ENKHUIZEN」, 「Woning品牌」, 「4632 4651」

using System; 
using System.Text.RegularExpressions; 
using System.Data.Odbc; 

namespace pdw_db 
{ 
    internal class pdw_db 
    { 
     public pdw_db() 
     { 
     } 

     private static void databaseThis(string capcode, string melding, string korps, string streetName, string preText, string postText, string cars) 
     { 
       string[] strArray = new string[] { "insert into alarmeringen2010(capcode, desc1, department, melding, alerting, data1, voertuigen)values('", capcode, "','", melding, "','", korps, "','", streetName, "','", preText, "','", postText, "','", cars, "',);" }; 
       string str = string.Concat(strArray); 

       OdbcConnection odbcConnection = new OdbcConnection("DSN=pdw_db"); 
       try 
       { 
        OdbcCommand odbcCommand = new OdbcCommand(str, odbcConnection); 
        odbcConnection.Open(); 
        OdbcDataReader odbcDataReader = odbcCommand.ExecuteReader(); 
        while (odbcDataReader.Read()) 
        { 
         Console.WriteLine(odbcDataReader.GetString(0)); 
        } 
        odbcDataReader.Close(); 
       } 
       finally 
       { 
        if (odbcConnection != null) 
        { 
         odbcConnection.Dispose(); 
        } 
       } 

     } 

     private static void Main(string[] args) 
     { 
      if (args.Length > 2) 
      { 
       return; 
      } 
      else 
      { 
       string alarm_capcode, alarm_text, alarm_korps; 

       //kill qoutes in alarmering 
       args[1] = args[1].Replace("\"", ""); 
       args[1] = args[1].Replace("\'", ""); 
       args[1] = args[1].Replace("'", ""); 
       args[2] = args[2].Replace("\"", ""); 
       args[2] = args[2].Replace("\'", ""); 
       args[2] = args[2].Replace("'", ""); 

       alarm_capcode = args[0]; 
       alarm_text = args[1]; 
       alarm_korps = args[2]; 

       Match m = Regex.Match(alarm_text, @"(.*\s)([A-Z]+.[0-9]+.[A-Z])(.*\s)([0-9].*\s)"); 

       string preText = m.Groups[1].Value; 
       string streetName = m.Groups[2].Value; 
       string postText = m.Groups[3].Value; 
       string cars = m.Groups[4].Value; 

       databaseThis(alarm_capcode, alarm_text, alarm_korps, streetName, preText, postText, cars); 

      } 
     } 
    } 
} 
+1

你爲什麼顯示我們這麼多不相關的代碼?只需提供輸入文本,所需的輸出和代碼與正則表達式。 –

+0

你能描述一下文本應該如何分解嗎?很難從你的正則表達式中找出你正在尋找的實際模式。 – jimmyfever

+0

preText = Prio 1 streetName = WESTERSTRAAT 140 ENKHUIZEN postText = Woning品牌 汽車= 4632 4651 – 810

回答

0

問題是與你的第4組 - 沒有[0-9]+[0-9].*你的最後一組缺少你最後NUMER:

Match m = Regex.Match(alarm_text, @"(.*\s)([A-Z]+.[0-9]+.[A-Z])(.*\s)([0-9].*\s[0-9]+)"); 

當然這也取決於你只有在最後一組號碼。
也有在你的第二個組的錯誤 - 沒有+\s文字去組3 - 現在它應該是確定

Match m = Regex.Match(alarm_text, @"(.*\s)([A-Z]+.[0-9]+.[A-Z]+\s)(.*\s)([0-9].*\s[0-9].*)"); 
+0

thnx您的幫助,但我沒有看到我的數據庫中的任何數據。 – 810

+0

@ user1307010當我以調試模式運行上面的代碼(第二個版本)時,它將您提供的文本分成四組。你有沒有檢查它在調試中的樣子?在我的情況下,三個第一組最後有空間,但我不知道它是否適合你。當你準備好你的alarm_text時可能有什麼問題嗎? – Romasz

+0

是的你的權利,輸出是正確的。所以問題是準備...但我找不到問題。 – 810

0

得到了幾乎代碼工作。只有他正在採取飛機價值文本。不是字符串

private static void databaseThis(string capcode, string melding, string korps) 
     { 
      Match m = Regex.Match(melding, @"(.*\s)([A-Z]+.[0-9]+.[A-Z]+\s)(.*\s)([0-9].*\s[0-9].*)"); 
      string preText = m.Groups[1].Value; 
      string streetName = m.Groups[2].Value; 
      string postText = m.Groups[3].Value; 
      string cars = m.Groups[4].Value; 

      string[] strArray = new string[] { "insert into alarmeringen2010(capcode, desc1, department, melding, alerting, data1, voertuigen)values('capcode','melding','korps','streetName','preText','postText','cars');" }; 
      string str = string.Concat(strArray); 
      }