如何排除第一组的单个字符被匹配到第二组?

How to exclude first group's single character from being matched into second group?

我想构建 q 个正则表达式来匹配重复的单个字符的模式,然后是彼此。 例如,同一个字符 'A' 出现三次,后跟另一个字符 'B' 两次。第二组的字符重复两次以上也没关系。 例如它应该匹配字符串 wuzDDDFFFxji

Full match  3-8 `DDDFF`
Group 1.    3-4 `D`
Group 2.    6-7 `F`

我想出了以下正则表达式,但有一个限制。

(.){2}(.){1}

它几乎可以工作,但它不会将第一组的字符排除在第二组的匹配之外。字符串 qwuiuQQQQQsas 将被匹配,因为:

Full match  5-10    `QQQQQ`
Group 1.    5-6 `Q`
Group 2.    8-9 `Q`

这与我想要的不符,但我找不到正确的语法来排除特定组与另一个组的匹配。我最近的尝试似乎没有用

(.){2}((?:)){1}


1st Capturing Group (.)
. matches any character (except for line terminators)
{2} matches the same text as most recently matched by the 1st capturing group
{2} Quantifier — Matches exactly 2 times
2nd Capturing Group ((?:))
Non-capturing group (?:)
 matches the same text as most recently matched by the 1st capturing group
{1} matches the same text as most recently matched by the 2nd capturing group
{1} Quantifier — Matches exactly one time (meaningless quantifier)

这里有什么提示吗?非常感谢!

为了避免匹配 qwuiuQQQQQsas,您需要使用否定先行而不是非捕获组:

(.){2}((?!).)
         ^^^^^^

the regex demo

(?!) 否定前瞻将 "restrict" . 模式仅匹配第 1 组中匹配以外的字符。

非捕获组不限制任何模式,但仅用于对仍使用文本的子模式进行分组,并且先行(零宽度断言)不使用文本并且仅检查是否存在符合该模式的文本是否在字符串中。

我建议使用“\1 后跟 \1”模式:

(.)+(?!)(.)+

演示:https://regex101.com/r/QkqpzS/1