我想匹配模式:从0或更多空格开始,然后是“ABC”,然后是任何内容。
所以像" ABC " " ABC111111" "ABC"
这样的东西会匹配。
但是像" AABC" "SABC"
这样的东西是不匹配的。
我试过了:
String Pattern = "^\\s*ABC(.*)";
但它不起作用。
有什么想法吗?顺便说一下,这是在C#中。
答案 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。