2009-07-02 45 views
0

我想匹配模式:从0或更多空格开始,接着是“ABC”,然后是任何内容。如何在正则表达式中构造这个

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

我想:

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

但它不工作。

任何想法?顺便说一句,这是用C#编写的。

+1

你的模式看起来我的权利。你确定它不起作用吗? – 2009-07-02 17:39:21

+1

是的,该模式对我也有效 - 也许你的C#代码有错误。你也可以发布代码吗? – 2009-07-02 17:40:59

回答

1

\\通常会放入一个文字反斜杠,这可能是您的解决方案失败的原因。除非你是做一个替代你不需要绕.*

括号除了空格字符[ \t\n\f\r\x0B]或空格,制表符,换行符,换页,回报和垂直选项卡还\s匹配字符。

我建议:

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

尝试

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

我验证了这个工程上regexpl.com

+0

难道^只是强制从行首开始考试? – 2009-07-02 17:45:35

0

确保您已设置的正则表达式引擎使用单线,而不是多行。

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(); 
    } 
}