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