2014-01-20 2 views
0

У меня нет выхода после Match m = Regex.Match. Я думаю, что есть проблема с этим. Может кто-то, пожалуйста, проверьте код, если все в порядке.Нет выхода при использовании совпадений regex

вход alarm_text выглядит следующим образом:

Прио 1 Westerstraat марки 140 Энкхеизен Woning 4632 4651

То, что я хотел сделать, это расщепление строки в четыре группы: "Prio 1", " Westerstraat 140 Энкхеизен», "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

Почему вы показываете нам так много не соответствующего кода? Просто введите текст ввода, желаемый вывод и код с помощью Regex. –

+0

Можете ли вы описать, как текст следует разделить словами? Трудно сказать из вашего регулярного выражения фактический шаблон, который вы ищете. – jimmyfever

+0

preText = Prio 1 streetName = WESTERSTRAAT 140 ENKHUIZEN postText = Woning brand cars = 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); 
      } 
Смежные вопросы