我已经解出了2022 advent of code day 6,但想知道是否有一种正则表达式方法可以找到4个不重复字符的第一个匹配项:

从问题看:

bvwbjplbgvbhsrlpgdmjqwftvncz

bvwbjplbgvbhsrlpgdmjqwftvncz

#丢弃为重复字母b

Bvwbjplbgvbhsrlpgdmjqwftvncz

#匹配第5个字符,表示第一个四字符块的结束,没有重复字符

在R中,我try 过:

txt <- "bvwbjplbgvbhsrlpgdmjqwftvncz"
str_match("(.*)\1", txt)

但我运气不好

推荐答案

您可以使用

stringr::str_extract(txt, "(.)(?!\\1)(.)(?!\\1|\\2)(.)(?!\\1|\\2|\\3)(.)")

请看regex demo.这里,(.)将任何字符捕获到随后编号的组中,并且(?!...)个否定查找头确保每个后续.与已经捕获的字符不匹配.

请参阅R demo:

library(stringr)
txt <- "bvwbjplbgvbhsrlpgdmjqwftvncz"
str_extract(txt, "(.)(?!\\1)(.)(?!\\1|\\2)(.)(?!\\1|\\2|\\3)(.)")
## => [1] "vwbj"

请注意,stringr::str_match(AS stringr::str_extract)将输入作为第一个参数,将正则表达式作为第二个参数.

R相关问答推荐

错误:非常长的R行中出现意外符号

如何使用列表中多个列表中的第一条记录创建数据框

用R ggplot2求上、下三角形中两个变量的矩阵热图

将选定的索引范围与阈值进行比较

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

解析嵌套程度极高的地理数据

以不同于绘图中元素的方式对GG图图例进行排序

在不对R中的变量分组的情况下取两行的平均值

用多边形替换地块点

网络抓取新闻标题和时间

如何移动点以使它们的打印不重叠

使用ggplot2绘制具有边缘分布的坡度图

使用其他DF中的文件名将列表中的每个元素保存到文件中

随机生成样本,同时在R内的随机样本中至少包含一次所有值

如何增加S的剧情大小?

如何在分子和分母垂直对齐并由水平线分隔的情况下为除法添加批注

有没有一种方法可以基于两个条件和现有的时间变量来创建时间值?

通过对列进行分组将数据帧拆分为多个数据帧

更新表内容时,如何在DT中保留选中的行?

使用从ls()获取名称的归约到左联接数据帧