【问题标题】:Correctly locating a string in string array在字符串数组中正确定位字符串
【发布时间】:2019-08-25 22:40:08
【问题描述】:

我有一个字符串数组,其中包含我想提取的用户名并将其添加到列表中。例如,我有这个字符串 =>“UserName: JohnSmith”,我想提取JohnSmith。以下是我试图开始工作的代码:

var documentSource = content.Replace("\n" , "").Trim();
string[] contents = documentSource.Split(',');

List<Model> modelList = new List<Model>();
Model model = new Model();

foreach (var item in contents)
{
    //this is where I'd like to locate the username or usernames
    if(item.Any())
    {
        model.userName = //username only;
        modelList.Add(model);
    }
}

return modelList;

【问题讨论】:

    标签: asp.net arrays string list


    【解决方案1】:

    这种问题用regular expressions可以轻松解决:

    using System.Text.RegularExpressions;
    
    // ...
    
    var regex = new Regex("UserName: ([^,]*)");
    
    // ..
    
    foreach(var item in contents)
    {
        var match = regex.Match(item);
        if(match.Success)
        {
             modelList.Add(
                new Model 
                { 
                   userName = match.Groups[1].Value 
                }
             );
        }
    }
    
    
    

    【讨论】:

    • 谢谢@Andrew Shepherd。这对我帮助很大。
    • 如果你有Username: John123, strings right after the username。我怎样才能检索John123
    • @JennyFromtheBlock 正则表达式可以轻松更改。 (我将修改我的答案,以便排除逗号)。查看此站点,以便您可以测试它们。 regexstorm.net/tester
    【解决方案2】:

    以最简单的形式,因为您知道每个用户名都在固定的"UserName: " 部分之后开始,所以应该是这样的:

    var documentSource = content.Replace("\n" , "").Trim();
    string[] contents = documentSource.Split(',', StringSplitOptions.RemoveEmptyEntries);
    
    var modelList = new List<Model>();
    
    foreach (var item in contents)
    {
        var username = item.Substring("UserName: ".Length).Trim();
        if (!string.IsNullOrEmpty(username))
        {
            Model model = new Model();
            model.userName = username;
            modelList.Add(model);
        }
    }
    
    return modelList;
    

    【讨论】:

      【解决方案3】:

      由于您知道用户名字符串中有一个:,而: 的第二部分是您想要的实际用户名,因此,您可以将字符串分成两部分并获取第二部分.如下所示:

      foreach (var item in contents)
      {
          var username = item.Split(':').Last()?.Trim();
          if(!string.IsNullOrEmpty(username))
          {
            modelList.Add(new Model{ userName = username });
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-13
        • 2015-08-06
        • 1970-01-01
        • 2014-01-29
        • 1970-01-01
        • 2019-01-17
        • 2016-02-18
        相关资源
        最近更新 更多