【问题标题】:c# How to check every single line with Regex.IsMatchc# 如何使用 Regex.IsMatch 检查每一行
【发布时间】:2013-08-12 15:01:24
【问题描述】:

我正在使用new Regex("(?m)^\S+ [A-Z]{1,3}$").IsMatch(sStringToCheck) 来检查多行字符串。

我的问题是,它似乎只验证字符串的最后一行。

此列表通过:

  • ABC-12345-DEF A
  • ABC-12345-DEF A 123
  • ABC-12345-DEF A

此列表失败:

  • ABC-12345-DEF A
  • ABC-12345-DEF A
  • ABC-12345-DEF A 123

但是,我希望两者都失败,因为每个都包含不匹配的行。

谢谢!

【问题讨论】:

    标签: c# regex multiline


    【解决方案1】:
    bool match = sStringToCheck
                .Split(new string[] {Environment.NewLine}, StringSplitOptions.None)
                .Any(line => new Regex(@"^\S+ [A-Z]{1,3}$").IsMatch(line));
    

    将检查每一行。这是你的目标吗?

    【讨论】:

    • 我想我可以从中工作。我唯一的问题是,我有多个检查,其中只有少数是多行的。因此“(?m​​)”。但是,我可以使用 If/Else...
    • 这也应该正确处理单行字符串,因为拆分只会返回 1 项
    • 只需要使用 All() 而不是 Any()。非常感谢!
    【解决方案2】:

    Jonesy 的回答是一种更好的方法,但为了彻底起见,一种非 LINQ-y 的方法是遍历每一行,然后用你的整体答案得出结果:

    bool match = false;
    foreach(string s in sStringToCheck.Split(new string[]{Environment.NewLine}, StringSplitOptions.None)){
        match = match | new Regex("(?m)^\S+ [A-Z]{1,3}$").IsMatch(s);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-04
      • 2011-12-17
      • 2017-03-25
      • 1970-01-01
      • 2015-03-22
      • 2018-01-18
      • 2011-12-13
      • 1970-01-01
      • 2015-07-20
      相关资源
      最近更新 更多