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

9

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

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

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

我希望能够使用MyRegex创建一个新的字符串,例如:
var created = MyRegex.ToString( new Dictionary<string, string>() {{ "group1", "data1" }};

这样,created 的值就会变成 "sometextdata1"。

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


可能是重复的问题: .NET正则表达式 - 创建字符串? - Sjoerd
3个回答

4

您需要一个叫做Rex的工具。虽然不是必需的,但这是我使用的工具 :-)

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

您可以将exe作为项目的引用(尽管不是理想的方法),并利用已公开的类。

它运行得相当不错。


这是一个很好的测试想法。 - Razor
不好意思,我试图为TO的示例创建一个精确的实现,所以我参考了Rex。但是我需要使用哪个类来指定命名组的值呢?我只能找到RexEngineRexSettings这两种类型,但我找不到任何设置值而不是生成纯随机字符串的方法。 你能帮我一下吗? :) - KnorxThieus
看起来微软已经删除了二进制文件,所以你不能再下载它了。真遗憾 :( - Razor
它仍然在这个链接上(https://www.microsoft.com/en-us/download/details.aspx?id=52296)。 - sorrell

1

原生的正则表达式无法做到这样。

如果你真的想要生成符合一组条件的字符串,你可以研究确定性语法(DCG)而不是正则表达式。像Prolog这样的逻辑编程语言应该能够生成符合你定义的语法规则的字符串。

来自维基百科:

一个DCG的基本示例有助于说明它们是什么样子的。
句子 --> 名词短语,动词短语。
名词短语 --> 限定词,名词。
动词短语 --> 动词,名词短语。
限定词 --> [the]。
限定词 --> [a]。
名词 --> [cat]。
名词 --> [bat]。
动词 --> [eats]。
这将生成像“the cat eats the bat”、“a bat eats the cat”这样的句子。您可以在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
    }
}

0

你可能想要检查一下 Pex 是否能够解决这个问题。创建一个方法,该方法接受一个字符串并返回该正则表达式是否与其匹配。Pex 可能足够聪明,可以为您的方法找到测试表达式各个方面的输入。 (它甚至可能帮助您捕获一些您尚未考虑的边角情况。

除此之外,没有其他方法。你正在要求一个系统(正则表达式)去做它完全不应该做的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接