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

在Julia中查找匹配复杂模式的所有子串

Julia正则表达式匹配特定子串

需求说明

需要匹配字符串中满足以下条件的所有子串:

  • 子串以至少N个连续的2、3、4组成的序列开头(顺序任意、可重复)
  • 子串以以下两种模式之一结尾:
    1. 单个字符6
    2. 至少M个连续的5(若需求是“超过M个”,则改为至少M+1个)

正则表达式构造

根据需求,可通过插值构造动态正则表达式(Julia支持在正则中插入变量):

完整代码示例

# 定义规则参数
N = 3  # 开头的2/3/4序列最小长度
M = 2  # 连续5的最小数量(若需求是"超过M个",后续替换为M+1即可)

# 构造正则表达式:匹配从非2/3/4字符后开始的符合条件的子串
# 若需要允许从连续2/3/4中间开始匹配,去掉 (?<![234]) 即可
pattern = Regex("(?<![234])([234]{$N,})(6|5{$M,})")

# 测试字符串(空格仅为视觉区分,实际匹配不受空格影响)
test_string = "1111122211111 2323232234233246 5161532161 232342342322224444223323555555"

# 查找所有匹配结果
matches = eachmatch(pattern, test_string)

# 输出匹配内容
println("Matches found:")
for match in matches
    println(match.match)
end

正则各部分解释

  • (?<![234]):负向后行断言,确保匹配的子串前不是2、3、4,避免从一段连续的2/3/4序列中间开始匹配(比如避免把2342346拆成多个重叠匹配)
  • ([234]{$N,}):匹配至少N个连续的2、3、4,满足开头长度要求
  • (6|5{$M,}):匹配结尾的单个6,或至少M个连续的5;若需求是“超过M个连续5”,则改为5{$(M+1),}

测试结果

当N=3、M=2时,代码会输出:

2323232234233246
232342342322224444223323555555

完全符合测试案例预期:第一个和第三个子串不匹配,第二个和第四个子串匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:15:27