用C#中的正则表达式寻找迭代次数优化的模式
考虑以下两种情况,在这两种情况下,要测试的字符串将只包含任意组合的字符“a”、“t”、“g”和“c”,并且可以是任意长度。例如,它可能只有“t”用C#中的正则表达式寻找迭代次数优化的模式,c#,.net,regex,optimization,C#,.net,Regex,Optimization,考虑以下两种情况,在这两种情况下,要测试的字符串将只包含任意组合的字符“a”、“t”、“g”和“c”,并且可以是任意长度。例如,它可能只有“t” 测试“a”是否出现5次以上。如果字符串长度为100,且字符“a”在前10位出现5次,则正则表达式不应搜索其余字符串 测试零个或多个连续的“a”是否只出现一次,并且字符串不能以“a”结尾。有效示例:GGTCCCTGGTAAAATCG、GCTGCTCGTCTCTTGCTTCG、ag。无效:a、AGTCTTGCGT、agtcga 现在我知道如何构造一个基
- 测试“a”是否出现5次以上。如果字符串长度为100,且字符“a”在前10位出现5次,则正则表达式不应搜索其余字符串
- 测试零个或多个连续的“a”是否只出现一次,并且字符串不能以“a”结尾。有效示例:GGTCCCTGGTAAAATCG、GCTGCTCGTCTCTTGCTTCG、ag。无效:a、AGTCTTGCGT、agtcga
任何关于优化正则表达式的帮助都会有所帮助。此外,不是首要问题,而是如何才能看到内部如何进行搜索(迭代次数等)? < P>如果性能是关键的,您可能需要考虑非正则表达式解决方案。例如,您的第一个需求可以通过使用
string.Contains
轻松解决
正则表达式通常以从左到右的线性方式扫描其输入,查看每个字符直到找到匹配项,如果存在回溯,则可能多次查看字符。另一方面,也有一些高级方法可以确定是否存在子字符串,而不必检查字符串中的所有字符。例如,要搜索aaaaaaa
,只需每五个字符检查一次,直到找到a
另外,不是主要的问题,而是我如何看到如何执行搜索的内部结构(迭代次数等)
您可以使用RegexBuddy调试正则表达式,并查看需要多少步骤:
< P>如果性能是关键的,你可能需要考虑非正则表达式。例如,您的第一个需求可以通过使用
string.Contains
轻松解决
正则表达式通常以从左到右的线性方式扫描其输入,查看每个字符直到找到匹配项,如果存在回溯,则可能多次查看字符。另一方面,也有一些高级方法可以确定是否存在子字符串,而不必检查字符串中的所有字符。例如,要搜索aaaaaaa
,只需每五个字符检查一次,直到找到a
另外,不是主要的问题,而是我如何看到如何执行搜索的内部结构(迭代次数等)
您可以使用RegexBuddy调试正则表达式,并查看需要多少步骤:
我认为将其写入多个语句(可能包括多个正则表达式和/或其他运算符)会“更好地优化”。在任何情况下,分析都是正确的。别忘了考虑环境因素,因为它可能会消除任何当地的效率提高。你需要一份杰弗里·弗里德尔的。在创建正则表达式时,有一些技巧不涉及回溯。Friedl的研究非常深入,我认为将它写在几个语句中会“更好地优化”,这些语句可能包括多个正则表达式和/或其他运算符。在任何情况下,分析都是正确的。别忘了考虑环境因素,因为它可能会消除任何当地的效率提高。你需要一份杰弗里·弗里德尔的。在创建正则表达式时,有一些技巧不涉及回溯。弗里德尔对事物进行了深入的研究。