我正在try 探索正则表达式捕获由连续重复的字符分组的子字符串并将其替换为相反的子字符串的能力,但using 100 only.

例如,给定字符串s <- "abxxxyyyyzzpqr",其中"xxxyyyyzz"应该被捕获,并依次被"zzyyyyxxx"替换.我想我们可能需要两个步骤:

  1. "捕获":如何设计模式来捕获"xxxyyyyzz"("x""y""z"是连续重复的)?
  2. "倒转":如何让xxxyyyyzz倒转,使我们最终获得一个新的"abzzyyyyxxxpqr"串?

由于我对正则表达式的了解有限,我不确定gsub能否完成这项任务alone.如有可能,将不胜感激,看看它将如何实施.


More examples

我追求的是100,不是特定的人物:

  • "xxabcyyyzzpqr"--"xxabczzyyypqr",其中"yyyzz"应为目标
  • "xaaab,,,@@@&&"--"xaaab&&@@@,,,",其中",,,@@@&&"应为目标
  • "xxaaab,,,@@@&&"-&gt;"aaaxxb&&@@@,,,",其中"xxaaa"",,,@@@&&"都应该是目标

推荐答案

The matching part

...是微不足道的:

(         # Match a sequence consisting of
  (.)     # a letter
  \2+     # followed by 1 or more instances of that same letter
){2,}     # 2 or more times.

试试看on regex101.com个.

The reversing part

...不是很多.

根据this page,替换字符串中唯一允许的特殊标记是反向引用,\L(l大小写转换)、\U(u大小写转换)和\E(e大小写转换).这意味着我们甚至无法获得PCRE有条件更换(例如${1:+foo:bar}).

由于替换字符串不能为我们提供任何有用的东西,我们需要以某种方式捕获组中仅使用模式本身的反转字符串.然而,据我所知,从字符串Y捕获字符串X(到单个组中)是不可能的,其中X不是Y的子字符串.分成多个组也不是一个 Select ,因为我们不知道我们将需要多少个组.

也就是说,只使用gsub()来反转一个子字符串是不可能的.

R相关问答推荐

查找满足SpatRaster中条件的单元格位置

具有多个依赖变量/LHS的逻辑模型

寻找图片边缘

如果列中存在相同的字符串,则对行值进行总和

在特定Quarto(reveal.js)幻灯片上隐藏徽标

如何直接从Fortran到R的数组大小?

在R中使用数据集名称

在连续尺度上转置标签[瀑布图,R]

如果某些列全部为NA,则更改列

如何在所有绘图中保持条件值的 colored颜色 相同?

合并DFS列表并将索引提取为新列

以更少间隔的较小表中的聚合离散频率表

如何在分组条形图中移动相关列?

如何对2个列表元素的所有组合进行操作?

如何在R中通过多个变量创建交叉表?

我如何go 掉盒子图底部的数字?

我们如何在R中透视数据并在之后添加计算

在R中,如何将误差条放置在堆叠的每个条上?

在同一单元格中创建包含整数和百分比的交叉表

把代码写成dplyr中的group_by/摘要更简洁吗?