我的应用程序具有使用正则表达式解析文本以提取特殊值的功能。我发现自己也需要创建遵循相同格式的字符串。有没有办法使用已定义的正则表达式来创建这些字符串?
例如,假设我的正则表达式看起来像这样:
public static Regex MyRegex = new Regex( @"sometext_(?<group1>\d*)" );
我希望能够使用MyRegex
创建一个新字符串,例如:
var created = MyRegex.ToString( new Dictionary<string, string>() {{ "group1", "data1" }};
这样created
将具有值“sometextdata1”。
更新:从下面的一些答案来看,我没有说清楚。我不想生成符合条件的随机字符串,我希望能够创建符合条件的特定字符串。在上面的例子中,我提供了“data1”来填充“group1”。基本上,我有一个正则表达式,我想以类似于格式字符串的方式使用,而不是定义一个单独的格式字符串。
答案 0 :(得分:3)
你需要一个名为Rex的工具。嗯,你不需要它,但它是我使用的: - )
http://research.microsoft.com/en-us/projects/rex/
您可以(虽然不理想)将exe添加为项目的参考,并使用已公开的类。
效果很好。
答案 1 :(得分:1)
原生RegEx不能做这样的事情。
如果确实想要生成符合一组条件的字符串,则可以调查definite clause grammars(DCG)而不是正则表达式。 logic programming language等Prolog应该能够生成与您定义的语法规则相匹配的字符串。
来自维基百科:
DCG的基本示例有助于说明它们是什么以及它们的外观。
句子 - &gt; noun_phrase,verb_phrase。
noun_phrase - &gt; det,noun。
verb_phrase - &gt;动词,noun_phrase。
det - &gt; [该]。
det - &gt; [A]。
名词 - &gt; [催化剂]。
名词 - &gt; [蝙蝠]。
动词 - &gt; [吃]。
这会产生诸如“猫吃蝙蝠”,“蝙蝠吃猫”之类的句子。可以在Prolog解释器中生成由该语法生成的语言中的所有有效表达式......
从您的问题来看,听起来这并不是您想要做的事情。我的建议是简单地创建一个包含Dictionary<String, String>
对象的类,并使用自定义ToString()
方法以适当的格式返回数据。这会容易得多; - )
e.g:
public class SpecialObject
{
public Dictionary<string, string> SpecialDictionary { get; set; }
public override string ToString()
{
return "sometext_group1data1"; // or whatever you want
}
}
答案 2 :(得分:0)
您可能想查看Pex是否可以解决这个问题。创建一个接受字符串的方法,并返回该Regex是否与之匹配。 Pex可能只是足够聪明,可以为您的方法找到测试表达式各个方面的输入。 (它甚至可以帮助你捕捉一些你没有考虑的角落案例。
除此之外,没有。你问一个系统(正则表达式)做一些完全没有做的事情。