我想要生成以下语言:
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)
实现这一目标最优雅的方法是什么?
您可以使用展望来实现它
对于 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)