gpt4 book ai didi

.NET 正则表达式重叠匹配取最后一个字符

转载 作者:行者123 更新时间:2023-12-01 13:49:21 26 4
gpt4 key购买 nike

我有这个 RegEx 可以找到一个 A、一个 B 和两个 C 的任何排列

(?:(?<A>A)|(?<B>B)|(?<C>C)){4}(?<-A>)(?<-B>)(?<-C>){2}

例如,对于这个组合,我们有 3 个匹配项(位置 1、7、15)

ABCCABCABCABCAABCC

如果我添加一个前瞻断言,我可以计算从下一个位置开始的巧合数,而不是从完整序列之后的下一个位置开始

(?=(?<value>(?:(?<A>A)|(?<B>B)|(?<C>C)){4}(?<-A>)(?<-B>)(?<-C>){2}))
^ ^

在这个例子中我们有 7 场比赛

1. ABCC
2. BCCA
3. CCAB
4. CABC
7. CABC
10. CABC
15. ABCC

正如 stribizhev 在上一篇文章中所提供的帮助: .NET Regex number of overlaping matches

现在我需要找到所有可能组合的序列,例如 ABC,但有 3 次且重叠一个字符。

例如,对于以下序列:

AABCBACBCCAACCB

这会将序列放在位置 1

Pos 1. ABC
Pos 3. CBA
Pos 5. ACB

所以它看起来是一个序列,其中我们有连续出现 3 次的 ABC 的任意组合,但将前一个匹配项的最后一个字符作为第一个字符。

我希望我解释得很好..

我该怎么做?

最佳答案

您可以通过对 @stribizhev 的简单修改来实现此目的解决方案。

首先,你只有 C 而不是两个:

(?:(?<A>A)|(?<B>B)|(?<C>C)){3}(?<-A>)(?<-B>)(?<-C>)

因为你想从最后一个字符开始新的匹配,你可以使用先行断言并只捕获它后面的两个字符:

(?=(?:(?<A>A)|(?<B>B)|(?<C>C)){3}(?<-A>)(?<-B>)(?<-C>))..

现在您只需重复三次并只捕获最后一个字符:

(?:(?=(?:(?<A>A)|(?<B>B)|(?<C>C)){3}(?<-A>)(?<-B>)(?<-C>))..){3}.

关于.NET 正则表达式重叠匹配取最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33106872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com