L = {A ^ NB ^ M | n + m = k,n,m> = 0}在C#中使用正则表达式

Cyb*_*lle 4 c# regex

我想要生成以下语言:

L={a^nb^m| n+m=k ,n,m>=0}
Run Code Online (Sandbox Code Playgroud)

为了一个常数k.

我正在使用Regex命名空间类System.Text.RegularExpressions.

我现在最好的解决方案是:

public void Match(string input, int k)
{
    Regex regex = new Regex(@"a*b*");
    Match match = regex.Match(input);
    if(match.Length==k)
        Console.WriteLine("Successfully");
    else
        Console.WriteLine("Don't match");
}
Run Code Online (Sandbox Code Playgroud)

对于k=5以下输入成功:

"aaabb"
"aabbb"
"aaaaa"
Run Code Online (Sandbox Code Playgroud)

例如,这不是:

"aaabbb"
"ab"
Run Code Online (Sandbox Code Playgroud)

实现这一目标最优雅的方法是什么?

nu1*_*73R 6

您可以使用展望来实现它

对于 k = 5

/^(?=.{5}$)a*b*$/
Run Code Online (Sandbox Code Playgroud)
  • (?=.{5}$)正面向前看.确保字符串仅包含5个字符.

  • a*b*匹配零次或多次出现,a然后出现零次或多次b

正则表达式演示

测试

public static void Match(string input, int k)
{
    Regex regex = new Regex(@"^(?=.{"+k+"}$)a*b*$");
    Console.WriteLine(regex.IsMatch(input));

}
Run Code Online (Sandbox Code Playgroud)
Match("aaabb", 5);
=> True
Match("aaabbb", 5);
=> False
Run Code Online (Sandbox Code Playgroud)