我想匹配模式:从0或更多空格开始,接着是“ABC”,然后是任何内容。如何在正则表达式中构造这个
所以像" ABC " " ABC111111" "ABC"
这样的东西就会匹配。
但是像" AABC" "SABC"
这样的东西不匹配。
我想:
String Pattern = "^\\s*ABC(.*)";
但它不工作。
任何想法?顺便说一句,这是用C#编写的。
我想匹配模式:从0或更多空格开始,接着是“ABC”,然后是任何内容。如何在正则表达式中构造这个
所以像" ABC " " ABC111111" "ABC"
这样的东西就会匹配。
但是像" AABC" "SABC"
这样的东西不匹配。
我想:
String Pattern = "^\\s*ABC(.*)";
但它不工作。
任何想法?顺便说一句,这是用C#编写的。
\\
通常会放入一个文字反斜杠,这可能是您的解决方案失败的原因。除非你是做一个替代你不需要绕.*
括号除了空格字符[ \t\n\f\r\x0B]
或空格,制表符,换行符,换页,回报和垂直选项卡还\s
匹配字符。
我建议:
String Pattern = @"^[ ]*ABC.*$";
尝试
string pattern = @"\s*ABC(.*)"; // Using @ makes it easier to read regex.
我验证了这个工程上regexpl.com
难道^只是强制从行首开始考试? – 2009-07-02 17:45:35
确保您已设置的正则表达式引擎使用单线,而不是多行。
我测试了这一点。有用。如果只希望匹配大写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();
}
}
你的模式看起来我的权利。你确定它不起作用吗? – 2009-07-02 17:39:21
是的,该模式对我也有效 - 也许你的C#代码有错误。你也可以发布代码吗? – 2009-07-02 17:40:59