当前位置: 首页 > 编程语言 > C#

从C#中的正则表达式模式生成文本的所有排列分享

时间:2023-04-11 01:07:11 C#

C#学习教程:从C#中的正则表达式模式生成文本的所有排列示例:varpattern="^My(?:biological|real)?NameisSteve$";varpermutations=getStringPermutations(模式);这将返回以下字符串列表:我的名字是史蒂夫,我的真名是史蒂夫史蒂夫我的生物名字是史蒂夫更新:显然正则表达式有无限数量的匹配项,所以我只想生成可选的字符串文字,如(?:生物|真实)?从我上面的例子。像(.)*这样的匹配项太多,所以我不生成它们。如果你将自己限制在两端锚定的正则表达式子集,并且只涉及文字文本、单字符通配符和交替,那么匹配字符串应该很容易枚举。我可能会将正则表达式重写为BNF语法,并使用它来生成匹配字符串的详尽列表。对于您的示例:->->“我的”->“”|“真实”|"biological"->"nameisSteve"以RHS上仅包含终结符号的产品开头,并在LHS上枚举非终结符的所有可能取值。然后以RHS非最终方式制作。对于非终结符的串联,形成由每个RHS非终结符表示的集合的笛卡尔积。对于交替,采用每个选项表示的集合的并集。继续下去,直到你完成它,然后你就完成了。但是,一旦包含“*”或“+”运算符,您就必须应对无数个匹配字符串。如果您还想处理反向引用等高级功能......您可能正在寻找与停止问题同构的东西!一种可能有点奇怪的方法是首先将可能的选择放入一个数组,然后根据该数组生成一个正则表达式,然后使用相同的数组生成排列。这是我写的一个函数的草图,它接受一个字符串列表并返回一个所有排列可能性的列表:(从每个字符中取字符)所有排列和共享的所有内容,如果它对你有用并且你需要知道更多C#学习教程,希望大家多多关注——publicstaticListCalculate(Liststrings){ListreturnValue=newList();int[]numbers=newint[strings.Count];for(intx=0;x本文收集自网络,不代表立场,如涉及侵权请点右联系管理员删除,转载请注明出处: