如何在正则表达式中构造它

时间:2009-07-02 17:37:09

标签: c# regex

我想匹配模式:从0或更多空格开始,然后是“ABC”,然后是任何内容。

所以像" ABC " " ABC111111" "ABC"这样的东西会匹配。
但是像" AABC" "SABC"这样的东西是不匹配的。

我试过了:

String Pattern = "^\\s*ABC(.*)";

但它不起作用。

有什么想法吗?顺便说一下,这是在C#中。

4 个答案:

答案 0 :(得分:2)

尝试

string pattern = @"\s*ABC(.*)"; // Using @ makes it easier to read regex. 

我确认这适用于regexpl.com

答案 1 :(得分:1)

\\通常会输入一个字面反斜杠,这可能是您的解决方案失败的地方。除非您正在进行替换,否则不需要围绕.*

的括号

同样\s匹配空格字符[ \t\n\f\r\x0B]或空格,制表符,换行符,换页,返回和垂直制表符以外的字符。

我建议:

String Pattern = @"^[ ]*ABC.*$";  

答案 2 :(得分:1)

我测试了这个。有用。如果只想匹配大写ABC,可以省略RegexOptions.IgnoreCase。

/// <summary>
/// Gets the part of the string after ABC
/// </summary>
/// <param name="input">Input string</param>
/// <param name="output">Contains the string after ABC</param>
/// <returns>true if success, false otherwise</returns>
public static bool TryGetStringAfterABC(string input, out string output)
{
    output = null;

    string pattern = "^\\s*ABC(?<rest>.*)";

    if (Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase))
    {
        Regex r = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
        output = r.Match(input).Result("${rest}");
        return true;
    }
    else
        return false;
}

致电代码:

static void Main(string[] args)
{
    string input = Console.ReadLine();

    while (input != "Q")
    {
        string output;
        if (MyRegEx.TryGetStringAfterABC(input, out output))
            Console.WriteLine("Output: " + output);
        else
            Console.WriteLine("No match");
        input = Console.ReadLine();
    }
}

答案 3 :(得分:0)

确保已将正则表达式引擎设置为使用SingleLine而非MultiLine。