有没有办法创建一个匹配给定C#正则表达式的字符串?

时间:2011-03-10 00:07:12

标签: c# regex

我的应用程序具有使用正则表达式解析文本以提取特殊值的功能。我发现自己也需要创建遵循相同格式的字符串。有没有办法使用已定义的正则表达式来创建这些字符串?

例如,假设我的正则表达式看起来像这样:

public static Regex MyRegex = new Regex( @"sometext_(?<group1>\d*)" );

我希望能够使用MyRegex创建一个新字符串,例如:

var created = MyRegex.ToString( new Dictionary<string, string>() {{ "group1", "data1" }};

这样created将具有值“sometextdata1”。

更新:从下面的一些答案来看,我没有说清楚。我不想生成符合条件的随机字符串,我希望能够创建符合条件的特定字符串。在上面的例子中,我提供了“data1”来填充“group1”。基本上,我有一个正则表达式,我想以类似于格式字符串的方式使用,而不是定义一个单独的格式字符串。

3 个答案:

答案 0 :(得分:3)

你需要一个名为Rex的工具。嗯,你不需要它,但它是我使用的: - )

http://research.microsoft.com/en-us/projects/rex/

您可以(虽然不理想)将exe添加为项目的参考,并使用已公开的类。

效果很好。

答案 1 :(得分:1)

原生RegEx不能做这样的事情。

如果确实想要生成符合一组条件的字符串,则可以调查definite clause grammars(DCG)而不是正则表达式。 logic programming languageProlog应该能够生成与您定义的语法规则相匹配的字符串。

来自维基百科:

  

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可能只是足够聪明,可以为您的方法找到测试表达式各个方面的输入。 (它甚至可以帮助你捕捉一些你没有考虑的角落案例。

除此之外,没有。你问一个系统(正则表达式)做一些完全没有做的事情。