Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C#中的正则表达式寻找迭代次数优化的模式_C#_.net_Regex_Optimization - Fatal编程技术网

用C#中的正则表达式寻找迭代次数优化的模式

用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”、“t”、“g”和“c”,并且可以是任意长度。例如,它可能只有“t”

  • 测试“a”是否出现5次以上。如果字符串长度为100,且字符“a”在前10位出现5次,则正则表达式不应搜索其余字符串
  • 测试零个或多个连续的“a”是否只出现一次,并且字符串不能以“a”结尾。有效示例:GGTCCCTGGTAAAATCG、GCTGCTCGTCTCTTGCTTCG、ag。无效:a、AGTCTTGCGT、agtcga
现在我知道如何构造一个基本正则表达式来测试这两种情况,但我希望确保搜索得到优化,不会浪费不必要的迭代。在上面的第二点中,agatcttgcgt应该在测试第三个字符时立即终止,因为它违反了连续规则


任何关于优化正则表达式的帮助都会有所帮助。此外,不是首要问题,而是如何才能看到内部如何进行搜索(迭代次数等)?

< P>如果性能是关键的,您可能需要考虑非正则表达式解决方案。例如,您的第一个需求可以通过使用
string.Contains
轻松解决

正则表达式通常以从左到右的线性方式扫描其输入,查看每个字符直到找到匹配项,如果存在回溯,则可能多次查看字符。另一方面,也有一些高级方法可以确定是否存在子字符串,而不必检查字符串中的所有字符。例如,要搜索
aaaaaaa
,只需每五个字符检查一次,直到找到
a

另外,不是主要的问题,而是我如何看到如何执行搜索的内部结构(迭代次数等)

您可以使用RegexBuddy调试正则表达式,并查看需要多少步骤:


< P>如果性能是关键的,你可能需要考虑非正则表达式。例如,您的第一个需求可以通过使用
string.Contains
轻松解决

正则表达式通常以从左到右的线性方式扫描其输入,查看每个字符直到找到匹配项,如果存在回溯,则可能多次查看字符。另一方面,也有一些高级方法可以确定是否存在子字符串,而不必检查字符串中的所有字符。例如,要搜索
aaaaaaa
,只需每五个字符检查一次,直到找到
a

另外,不是主要的问题,而是我如何看到如何执行搜索的内部结构(迭代次数等)

您可以使用RegexBuddy调试正则表达式,并查看需要多少步骤:

我认为将其写入多个语句(可能包括多个正则表达式和/或其他运算符)会“更好地优化”。在任何情况下,分析都是正确的。别忘了考虑环境因素,因为它可能会消除任何当地的效率提高。你需要一份杰弗里·弗里德尔的。在创建正则表达式时,有一些技巧不涉及回溯。Friedl的研究非常深入,我认为将它写在几个语句中会“更好地优化”,这些语句可能包括多个正则表达式和/或其他运算符。在任何情况下,分析都是正确的。别忘了考虑环境因素,因为它可能会消除任何当地的效率提高。你需要一份杰弗里·弗里德尔的。在创建正则表达式时,有一些技巧不涉及回溯。弗里德尔对事物进行了深入的研究。