我想选择精确出现 n 次的相同元素。
匹配此字符串中精确重复 3 次的字母:"aaaaabbbcccccccccdddee"
这应该返回 "bbb" 和 "ddd"
如果我定义我应该匹配的内容,如“b{3}”或“d{3}”,这会更容易,但我想匹配所有元素
我试过了,最接近的是这个正则表达式:(.)\1{2}(?!\1) 返回 "aaa"、"bbb"、"ccc"、"ddd"
由于“非固定宽度”(?<!\1)
,我不能在后面添加负面的lookbehind最佳答案
一种可能性是使用一个正则表达式来查找一个不跟随其自身(或行首)的字符,然后是三个相同的字符,然后是另一个与后三个不同的字符,即
(?:(.)(?!\1)|^)((.)\3{2})(?!\3)
匹配在第 2 组中被捕获。但问题是它在匹配之前吸收了一个字符,因此找不到相邻的匹配:如演示中所示,它只匹配 aaa
, ccc
和 eee
在 aaabbbcccdddeee
.
这个问题可以通过将整个正则表达式设为前瞻来解决,该技术允许捕获重叠匹配,如 this question 中所述.所以:
(?=(?:(.)(?!\1)|^)((.)\3{2})(?!\3))
同样,比赛在第 2 组中被捕获。
关于regex - 匹配所有出现 n 次的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71656063/