编写一个正则表达式以搜索子字符串C#。

3

我有一个字符串,想要检查并在其中搜索子字符串。如果找到了子字符串,我想对原始字符串进行某些操作。

这个字符串看起来像这样:

"\r\radmin@Modem -- *<456> \radmin@Modem -- *<456> "  

目标:在字符串中搜索子字符串模式" -- *<456> ",如果存在则返回成功或失败(数字的数量介于1到无限大之间:1、5、36、76、478、975等)。

我需要的正则表达式模式是什么?


@"-- \*<\d+>" 是什么意思? - Aserre
是的,没问题,它可以正常工作。谢谢! - Orionlk
请不要把我看作是一个讨厌者,但这显然是一个“为我编写代码”的问题——它仍然得到了赞和大量回复,甚至没有评论“你尝试过什么?”。这有点不对,你不觉得吗? - insomnium_
@insomnium_ 没有错,而且我的尝试都不相关,因为对我来说什么都不起作用(我还是正则表达式的新手),所以我请求帮助如何编写我需要的正则表达式,我认为这没有任何问题。 - Orionlk
7个回答

3
使用此代码:
var myRegex = new Regex("(?<=<)[0-9]+(?=>)");
string resultString = myRegex.Match(yourString).Value;
Console.WriteLine(resultString);
// matches 456

请在正则表达式演示中查看匹配结果。

解释

  • 前置断言(?<=<)断言前面的字符是<
  • [0-9]+匹配一个或多个数字
  • 后置断言(?=>)断言后面的字符是>

这个很好用,而且相当简单,我必须承认 :) 谢谢! - Orionlk

1
您可以使用以下代码来检查您的模式是否存在:
 string yourInput = "\r\radmin@Modem -- *<456> \radmin@Modem -- *<456> "  ; 
 string pattern = @"<(\d+)>"; 
 boolean success = Regex.Match(yourInput , pattern, RegexOptions.IgnoreCase).Success ; 

如果找到一个数字,success 将为真。

谢谢,我会检查一下。 - Orionlk

1
你可以使用这个正则表达式。
<[1-9][0-9]*>

Explanation(解释):
[1-9]

这部分是1-9的范围,因此您的数字必须大于0。
[0-9]*

数字范围从0到9,*让您可以拥有任意大小的数字。
另一种方法: 您还可以使用特殊字符表示数字,但这取决于正则表达式语法。
\d

谢谢您的解释 :) - Orionlk

1
使用这个模式,您可以匹配字符串:"--\s\*\<\d{3}\>" 注意:如果数字的数量可以改变,请使用以下内容:"--\s\*\<\d{MIN,MAX}\>" 其中MINMAX是字符串中可以出现的数字数量(在我们感兴趣的匹配部分内)。
using System;
using System.Text.RegularExpressions;

class Example
{
   static void Main()
   {
      string text = "One car red car blue car";
      // This regex will match the pattern you're looking for
      // Since youre new to regexes :) I'll explain it a little:
      // "--" matches "--" literally, "\s" matches the space in between but only once.
      // "\*" matches the "*" and "\<" and "\>" match "<" and ">" respectively
      // "\d" matches a digit 0-9 and "{3}" indicates that there are three digits 
      string pat = @"--\s\*\<\d{3}\>";

      // Instantiate the regular expression object.
      Regex r = new Regex(pat, RegexOptions.IgnoreCase);

      // Match the regular expression pattern against a text string.
      Match m = r.Match(text);
      while (m.Success) 
      {
         // Do something ...
         // Find next match
         m = m.NextMatch();
      }
   }
}

这将允许您按照每个匹配的基础进行任何更改。因此,每次匹配正则表达式时,您可以对字符串进行某些操作,然后查看是否有另一个匹配,依此类推...

1
你可以使用 Regex.IsMatch 来匹配像 -- *<456> 这样的字符串,使用这个正则表达式 --\\s\\*<\\d+>
bool MatchTheNumTag(string str)
{
    Regex reg = new Regex("--\\s\\*<\\d+>");
    return reg.IsMatch(str);
}

1
也许以下内容可以帮助您:
    static void Main(string[] args)
    {
        string originalString= "\r\radmin@Modem -- *<456> \radmin@Modem -- *<456> ";
        Regex reg = new Regex(@"-- \*<[1-9][0-9]*>");
        bool isMatch = reg.IsMatch(originalString);

        Console.WriteLine(isMatch);
    }

0
欢迎来到正则表达式!
你需要知道,正则表达式中的某些字符是特殊字符,需要进行转义。你可以在这里找到它们:http://www.regular-expressions.info/characters.html 这意味着你的模式所对应的正则表达式应该是\s\-\-\s\*<456> \s表示空格。

\s 不仅仅是空格。它等同于 [ \t\n] - Aserre
是的,但我想保持我的答案简单。 - Davio
那么为什么要在其中添加错误信息呢?在这种情况下,最好将\s替换为简单的空格。 - Aserre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接