C++ C++;:正则表达式模式

C++ C++;:正则表达式模式,c++,regex,C++,Regex,我得到了一个正则表达式模式:(~[a-Z]){10,30}(感谢KekuSemau)。我需要编辑它,所以它会跳过一个字母。所以它会像下面一样 Input: CABBYCRDCEBFYGGHQIPJOK Output: A B C D E F G H I J K 每次迭代只匹配两个字母,但只捕获第二部分 (?:~[A-Z](~[A-Z])){5,15} 现场: 我将重复计数(在{}中的位)减少了一半,因为新的正则表达式一次匹配两个 (?:…)中的?:位禁用对组的捕获。仅在rege

我得到了一个正则表达式模式:(~[a-Z]){10,30}(感谢KekuSemau)。我需要编辑它,所以它会跳过一个字母。所以它会像下面一样

Input:    CABBYCRDCEBFYGGHQIPJOK 
Output:    A B C D E F G H I J K

每次迭代只匹配两个字母,但只捕获第二部分

(?:~[A-Z](~[A-Z])){5,15}
现场:

我将重复计数(在{}中的位)减少了一半,因为新的正则表达式一次匹配两个


(?:…)
中的
?:
位禁用对组的捕获。

仅在regex中,无法直接实现这一点。 但是您可以在代码中执行此操作:

使用以下正则表达式:

(.(?<pick>[A-Z]))+
(.(?[A-Z]))+
在代码中,对所需组的“捕获”进行循环,如c#:

字符串值=”;
for(int i=0;i
也许对于该输入,您可以匹配第一个字符并捕获组中的第二个字符,然后替换为空白和捕获组
~
有什么用?只需将
(.)
替换为“$1”(空格+1)。
string value = "";
for (int i = 0; i < match.Groups["pick"].Captures.Count; i++)
{
   value = match.Groups["pick"].Captures[0].Value;
}