0

考虑以下两种情况,在这两种情况下,要测试的字符串都将仅包含任意组合的字符“a”、“t”、“g”和“c”,并且可以是任意长度。例如,它可能只有“t”。

  • 测试“a”是否出现超过 5 次。如果字符串的长度为 100,并且字符“a”在前 10 个位置出现五次,则正则表达式不应搜索剩余的字符串。
  • 测试是否零个或多个连续的“a”只出现一次,并且字符串不能以“a”结尾。有效示例:ggtcccccccctggtaaaatcg、gctgctcgtccttgcttcg、ag。无效:a、agatcttgcgt、agtcga。

现在我知道如何构建一个基本的正则表达式来测试这两种情况,但我想确保搜索得到优化并且不会浪费不必要的迭代。在上面的第二点中,agatcttgcgt 应该在测试第三个字符后立即终止,因为它违反了连续规则。

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

4

1 回答 1

3

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

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

此外,这不是主要问题,而是我如何才能看到如何执行搜索的内部信息(迭代次数等)?

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

RegexBuddy:调试正则表达式

于 2012-08-24T00:14:41.820 回答