1

我正在使用 asp.net。我正在尝试拆分数据表中的数据。我有一个这样的代码示例:

 {      dt=objErrorLoggingDataAccess.GetErrorDetails(errorID);

        string[] stringSeparators = new string[] { "Message" };
        string error = dt.Rows[0]["Message"].ToString();
        string[] test = error.Split(stringSeparators, StringSplitOptions.None);
        string PageName = test[0].ToString();
        PageNameLabel.Text = PageName;

        stringSeparators=new string[] {HttpContext.Current.Request.Url.ToString()};
        error = dt.Rows[0]["Message"].ToString();
        test = error.Split(stringSeparators, StringSplitOptions.None);
        string Message = test[0].ToString();
        MessageLabel.Text = Message;}

在数据表中有以下数据:

 {....ID.......Message.......................................................................................................................
 ....1........http://localhost:10489/images/CategoryIcon/images    Message :   File does not exist. UserName: naresh@naresh.com
 ....2........http://localhost:10489/images/CategoryIcon/images    Message : File does not exist. UserName: iswar@iswar.com}

我的问题是:如何拆分消息并存储在标签中?我想

   {http://localhost:10489/images/CategoryIcon/images}

分别和 UserName 和 message 分开。我怎样才能做到这一点?通过执行上面的代码,我可以拆分

  { http://localhost:10489/images/CategoryIcon/images 
  }

只要。如何拆分 Message 列并存储在 pageLabel、MessageLabel、UserNamelabel 中?

4

1 回答 1

1

在这种情况下,我会使用正则表达式。因为仅通过拆分此字符串对我来说看起来有点不灵活。

我针对这个快速而肮脏的 RegEx 测试了您的数据示例:

(?<id>\d+)\.*(?<url>\w+:\/\/[\w@][\w.:@]+\/?[\w\.?=%&=\-@/$,]*)\s*Message\s*:\s*(?<message>.*)UserName:\s*(?<username>([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3}))

它支持有效的 URL 和电子邮件模式。

Regex regex = new Regex(
      "(?<id>\\d+)\\.*(?<url>\\w+:\\/\\/[\\w@][\\w.:@]+\\/?[\\w\\.?"+
      "=%&=\\-@/$,]*)\\s*Message\\s*:\\s*(?<message>.*)UserName:\\s"+
      "*(?<username>([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1"+
      ",3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|"+
      "[0-9]{1,3}))",
    RegexOptions.IgnoreCase
    | RegexOptions.CultureInvariant
    | RegexOptions.IgnorePatternWhitespace
    | RegexOptions.Compiled
    );


// Capture the first Match, if any, in the InputText
Match m = regex.Match(InputText);

// Capture all Matches in the InputText
MatchCollection ms = regex.Matches(InputText);

// Test to see if there is a match in the InputText
bool IsMatch = regex.IsMatch(InputText);

// Get the names of all the named capture groups
// I included your fields as groups: id, url, message and username
string[] GroupNames = regex.GetGroupNames();

我不知道您需要多久调用一次此代码。如果数据太多,可能会遇到性能问题。此正则表达式是 q&d - 请根据您的需要进行调整。

于 2013-08-13T10:26:23.050 回答