C# 是否可以基于正则表达式模式生成示例字符串?
在我的应用程序中,用户可以在文本框中输入自己的正则表达式模式,以便强制其他用户/文本框进行特定输入。用户是否可能看到与他输入的正则表达式匹配的字符串示例?例如,如果他要输入:C# 是否可以基于正则表达式模式生成示例字符串?,c#,regex,string,C#,Regex,String,在我的应用程序中,用户可以在文本框中输入自己的正则表达式模式,以便强制其他用户/文本框进行特定输入。用户是否可能看到与他输入的正则表达式匹配的字符串示例?例如,如果他要输入:^[A-Z]{2}$,它将生成一个类似“XX”的字符串,向用户显示他只能输入两个大写字母 如果没有简单的方法来实现这一点(我想没有),那么构建有多困难?或者类似的东西已经存在了吗?请退出。看起来它可以做你想做的事。不过它是用Java编写的 以下是测试套件中的一个示例: @Test public void sho
^[A-Z]{2}$
,它将生成一个类似“XX
”的字符串,向用户显示他只能输入两个大写字母
如果没有简单的方法来实现这一点(我想没有),那么构建有多困难?或者类似的东西已经存在了吗?请退出。看起来它可以做你想做的事。不过它是用Java编写的
以下是测试套件中的一个示例:
@Test
public void shouldGenerateTextCorrectly() {
String regex = "[ab]{4,6}c";
Xeger generator = new Xeger(regex);
for (int i = 0; i < 100; i++) {
String text = generator.generate();
assertTrue(text.matches(regex));
}
}
@测试
public void应生成extcorrect(){
字符串regex=“[ab]{4,6}c”;
Xeger生成器=新的Xeger(正则表达式);
对于(int i=0;i<100;i++){
String text=generator.generate();
assertTrue(text.matches(regex));
}
}
更新:多亏了Nikos Baxevanis,dk.brics.automaton已经被移植到了C的C#,您可能还想看看这个项目。有关更多详细信息,请参阅答案
示例
var regex = @"((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)";
var xeger = new Xeger(regex);
var result = Regex.IsMatch(xeger.Generate(), regex);
// -> Prints 'true'
我曾经也需要这样的东西,所以我用上面提到的xeger lib创建了一个简单的gui程序。只需从dist文件夹运行.jar(需要jre)
这正是我想要的。。但是对于C#。至少我有一些东西可以用作参考。Xeger只是一个薄薄的包装器,它是一些regexp操作的DFA/NFA实现。也许C#某处也有类似的功能?@MartinWickman是的,dk.brics.automaton和xeger源代码都已移植到C#at see,这可能会对您有所帮助。Nikos,如果您使用FareAlberto显示代码示例,这将非常有用,我刚刚添加了一个示例。希望有帮助。