我正在尝试探索正则表达式捕获由连续重复的字符分组的子字符串并将其替换为其相反的能力,但是仅使用
gsub
。
例如,给定一个字符串
s <- "abxxxyyyyzzpqr"
,其中 "xxxyyyyzz"
应该被捕获并依次替换为 "zzyyyyxxx"
。我想我们可能需要两个步骤:
"xxxyyyyzz"
的图案("x"
、"y"
、"z"
不断重复)xxxyyyyzz
反转,最终得到一个新的字符串"abzzyyyyxxxpqr"
?由于我对正则表达式的了解有限,我不确定
gsub
是否可以独自完成这项任务。如果可能的话,我们将不胜感激地了解如何实施它。
我正在寻找通用正则表达式,而不是特定字符:
"xxabcyyyzzpqr"
-> "xxabczzyyypqr"
,其中 "yyyzz"
应该是目标"xaaab,,,@@@&&"
-> "xaaab&&@@@,,,"
,其中 ",,,@@@&&"
应该是目标"xxaaab,,,@@@&&"
-> "aaaxxb&&@@@,,,"
,其中 "xxaaa"
和 ",,,@@@&&"
都应该是目标...很微不足道:
( # Match a sequence consisting of
(.) # a letter
\2+ # followed by 1 or more instances of that same letter
){2,} # 2 or more times.
在 regex101.com 上尝试一下。
换向部分根据
(l小写转换)、
\U
(u大写转换)和
\E
(end)大小写转换)。这意味着我们甚至无法访问 PCRE 条件替换(例如
${1:+foo:bar}
)。由于替换字符串没有任何帮助,我们需要仅使用模式本身来捕获组中的反转字符串。然而,据我所知,从字符串 Y 捕获字符串 X(到单个组中),其中 X 不是 Y 的子字符串是不可能的。捕获多个组也不是一种选择,因为我们不知道需要多少个组。
也就是说,仅使用
gsub()
来反转字符串是不可能的。