【问题标题】:C# Find a matching string by regexC#通过正则表达式查找匹配的字符串
【发布时间】:2016-01-19 14:50:58
【问题描述】:

我想知道,我的字符串是否包含像 #1、#a、#abc、#123、#abc123dsds 等这样的文本...('#' 字符与一个或多个字符(数字和字母)。

到目前为止我的代码不起作用:

string test = "#123";
boolean matches = test.Contains("#.+");

matches 变量是 false

【问题讨论】:

  • String.Contains 不接受正则表达式。使用Regex.IsMatch(test, "#.+")
  • 你使用boolean而不是bool有什么原因吗?
  • 如果您明确追求字母和数字,那么您可以使用[A-Za-z0-9] 而不是.,因为您可以简单地使用.startsWith("#").length > 1

标签: c# regex


【解决方案1】:

String.Contains 不接受正则表达式。

使用Regex.IsMatch:

var matches = Regex.IsMatch(test, "#.+");

【讨论】:

  • 如果你真的只需要检查字母和数字,你可以使用@"#[\p{L}\d]+"模式。
【解决方案2】:

test.Contains("#.+"); 不“理解”正则表达式。它会逐字检查字符串test 是否确实包含#.+ 字符序列,而#123 不包含。

改用Regex.IsMatch

bool matches = Regex.IsMatch(test, "#.+");

Demo.

【讨论】:

    【解决方案3】:

    或者不使用正则表达式,您可以使用StartsWithEnumerable.Anychar.IsLetterOrDigit 等方法的组合;

    var s = "#abc123dsds+";
    var matches = s.Length > 1 && s.StartsWith("#") && s.Substring(1).All(char.IsLetterOrDigit);
    

    【讨论】:

    • 为什么正则表达式优于s.StartsWith("#") && s.Substring(1).All(Char.IsLetterOrDigit)?但是,目前它也接受 # 为有效。
    • @TimSchmelter 只是我的意见,因为它比我的解决方案更简单。正如你所说,##### 在我的回答中不匹配。
    • @TimSchmelter 等一下,它不应该匹配,因为# 当然不是字母。我删除那些句子。我的答案更好。哈哈:)
    • 但它仍然允许"#" 作为匹配项,即使# 后面应该跟一个字母或数字。所以需要Length > 1。这是主观的,但 imo 字符串方法更简单。
    • @TimSchmelter 对。我认为?: 解决了这个问题。已更新。
    【解决方案4】:

    您需要使用正则表达式才能使用正则表达式模式。

    string text = "#123";
    Regex rgx = new Regex("#[a-zA-Z0-9]+");
    var match = rgx.Match(text);
    bool matche = match.Success)
    

    【讨论】:

      【解决方案5】:

      这对我有用。 \# 检查是否以 # 开头,\w 检查是否为单词。

       class Program
      {
          static void Main(string[] args)
          {
              string text = "#2";
              string pat = @"\#(\w+)";
      
              Regex r = new Regex(pat);
      
              Match m = r.Match(text);
      
              Console.WriteLine(m.Success);
              Console.ReadKey();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-16
        • 2015-06-15
        • 2015-04-02
        • 2017-08-29
        • 2014-11-26
        • 2011-12-21
        • 1970-01-01
        • 2018-07-26
        相关资源
        最近更新 更多