You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找匹配最长重复GGG序列的正则表达式(间隔≤10字符)

解决最长GGG重复序列匹配问题

Hey there! Let's fix that regex issue you're having. Your original pattern ((GGG).{0,10}?)* isn't working well for two key reasons:

  • The non-greedy quantifier .{0,10}? tries to match as few characters as possible, so it often stops early instead of capturing the longest continuous sequence of GGGs with valid gaps.
  • It doesn't anchor to a valid continuous range, so it can match scattered GGGs or even empty strings when no GGGs are present.

Correct Regex Pattern

To capture sequences where every pair of GGGs is separated by 0 to 10 "interrupt" characters, use this greedy, focused pattern:

(GGG(?:.{0,10}GGG)*)

Breakdown of the pattern:

  • GGG: Starts the match with a valid GGG sequence
  • (?:.{0,10}GGG)*: A non-capturing group that repeats any number of times:
    • .{0,10}: Matches 0 to 10 interrupt characters (including zero, so consecutive GGGs like GGGG are allowed)
    • GGG: Matches the next valid GGG sequence
    • The * is greedy, so it will keep matching as many valid GGG pairs as possible to get the longest possible sequence
  • The outer parentheses capture the entire valid sequence for later use

How to Find the Longest Matching Segment

Regex engines will return all valid matches, but we need to pick the longest one. Here's a Python example to do that:

import re

target_str = "CAGTTAGGGTTTAGGGTTAGGTTTAGGGTTAGGGTTAGGGTGAGGTGAGGGTGAGGGTTAGGGTGAGGGGTGAGGGGTTGGGGTTAGGGTTAGGGTTAGGAGTTGCAGGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTACTTTAGGGTTAGGGTTGGGGGTTTAGGGTTTAGGGTTTAGGGTTTAGGGTTTAGGGTTAGAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTACCTGCTTACTTGCTGCAGGGTTAGGGTTAGGGTTAGGGTTAAGTTAGGGTTTAGGGTTGGGGTTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGGGTTAGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGAGGTTAGGGTTAGGTTAGGGTTAGGGTTAGGGTTAGGGGTTAGGGTTAGGGTTAGGGTTAGGGTTGCAGGGTTAGGGTTGGGGTTAGGGGTTAGGGGTTGGGGGGGTTAGGGTTGGGGGTTGGGGGTTAGGGAGGGTTAGGGGTTGGGGGTTGCAGGGGTTAGGGTTAGGGGTTGGGGTTAGGGTTAGGGTTAGGGTTACCTTGGGGGTTGGGGTTAGGGTTAGGGTTGCAGGGTTAGGGTTAGGAGTTAGGGTTAGAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTTAGGGTTAGGGTTGGGGTTAGGGTTAGAGGTTAGGGTTAGGGGTTGGGGTTAGGGGTTGGGGGTTGGGGTTAGGGTTGCAGAAGGGGTTGAGCAGGGTGGGAGTTAGGGATTAGGGATTAGGAGTTAGGGTGAGGGTTAGGGTTAGGGTGGGGTGGGGATTGGGGATTGGGAGTTAGGGTGGGTGGGGATTGGGGAGTTAGGAGTTAGGAGTTAGGAGTTAGGGAGTTAGGTTAGGGAGTTAGGGTTAGGAGTTAGAGGTTAGGGTTAGGGTGGGAGTTAGGGAGTTAGGAGGTGGGGTTGGGGTTAGGGTTAGGAGTTAGGGTTAGGGTTAGGGTTAGGGATTGGGAGTTAGGGTAGGAGTTAGGGTTAGAGGTTAGGAGTTAGGGTTAGGAGTTAGGGATTAGAGGTTAGGGTGGGATTAGGAGTTACTTACTTAGGGAGTTAGGAGTTAGGAGTTAGGGTGGGGTGGGAGTTAGAGGTTAGGAGTTAGGAGTTAGGGTTAGGGTTAGGAGTTAAGGGTTAGGGATTAGGAGTTAGGGTTAGGGTTAGGAGTTAGGGAGTTAGGGTGGGGTGGGAGTTGCAGGGATTGGGTTAGGGTTAGGAGTTGGGAGTTGGGGAGTTGGGAGTTAGGGTTACAGGGTGGGAGTTAGGAGTTAGGGAGTTAGGAGTTAGAGGTTAGGGATTAGGGGT"

# Find all valid sequences
matches = re.findall(r'(GGG(?:.{0,10}GGG)*)', target_str)

# Pick the longest match
if matches:
    longest_match = max(matches, key=lambda x: len(x))
    print(f"Longest valid segment: {longest_match}")
    print(f"Length: {len(longest_match)}")
    print(f"Number of GGG sequences: {longest_match.count('GGG')}")
else:
    print("No valid GGG sequences found.")

Extra Notes

  • If you want to include overlapping GGG matches (like counting GGGG as two overlapping GGG sequences), use a positive lookahead pattern to capture all possible overlapping segments:
    (?=(GGG(?:.{0,10}GGG)*))
    
    Then you can still filter the results to find the longest one.
  • This logic works in other languages too—just find all matches, then sort or filter by length to get the longest valid segment.

内容的提问来源于stack exchange,提问作者Lior Paz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:45:21