【问题标题】:How to create C# correct string filter by regexp如何通过正则表达式创建 C# 正确的字符串过滤器
【发布时间】:2020-03-28 15:08:36
【问题描述】:

在 C# 上遇到正则表达式的问题。我通过 Directory.GetDirectories 获取字符串列表(目录名称)。 例如:

E:\DevArea\SandBox\1122334455
E:\DevArea\SandBox\1231231231
E:\DevArea\SandBox\1231231232
E:\DevArea\SandBox\1231231233
E:\DevArea\SandBox\1231231234
E:\DevArea\SandBox\123123123123
E:\DevArea\SandBox\1231231231ddd

我需要找到仅包含 10 位数字(仅 10 位)的目录名称。 我尝试使用下一个:

public List<string> GetDirectoryList()
{
    var directoryList = new List<string>();
    var list = Directory.GetDirectories(sourcePath);
    foreach (var field in list)
    {
        if (checker.CheckInfo(field.Substring(field.LastIndexOf('\\') + 1)))
        {
            directoryList.Add(field);
        }
    }
    return directoryList;
}

public bool CheckInfo(string checkingInfo)
{
    string stringPattern = "[0-9]{10}";

    if (!Regex.IsMatch(checkingInfo, stringPattern))
    {
        return false;
    }

    return true;
}

结果我得到了由数字组成的目录名称列表,但还有下一个:

E:\DevArea\SandBox\123123123123

如何忽略超过 10 位的名称?

【问题讨论】:

  • (?&lt;!\d)[0-9]{10}(?!\d)
  • 由于您剥离了父目录,您只需将锚点添加到正则表达式 ^\d{10}$
  • 非常感谢! (?

标签: c# regex filter


【解决方案1】:

去做吧:

    public bool CheckInfo(string checkingInfo)
    {
        return Regex.IsMatch(checkingInfo, "^[0-9]{10}$");
    }

【讨论】:

    【解决方案2】:

    我认为最好这样做:

    public List<string> GetDirectoryList()
    {
    var directoryList = new List<string>();
    var list = Directory.GetDirectories(sourcePath);
    string stringPattern = "(?<!\d)[0-9]{10}(?!\d)";
    
    foreach (var field in list)
    {
        if (Regex.IsMatch(checkingInfo, stringPattern))
        {
            directoryList.Add(field);
        }
    }
    return directoryList;
    }
    

    感谢 ctwheels!

    【讨论】:

      猜你喜欢
      • 2012-10-13
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 2020-05-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      相关资源
      最近更新 更多