首页 > 解决方案 > 是否有一个 R 函数可以用相同长度的字符串替换匹配的 RegEx?

问题描述

我有一个矢量图

test <- c("NNNCTCGTNNNGTCGTNN", "NNNNNCGTNNNGTCGTGN")

我想用相同的长度“ - ”替换所有元素头部的所有N。当我使用函数时,只用一个“-”替换。gsub

gsub("^N+", "-", test)
# [1] "-CTCGTNNNGTCGTNN" "-CGTNNNGTCGTGN"  

但我希望结果看起来像这样

# "---CTCGTNNNGTCGTNN", "-----CGTNNNGTCGTGN"

是否有任何 R 函数可以做到这一点?感谢您的耐心和建议。

标签: rregexreplace

解决方案


你可以写:

test <- c("NNNCTCGTNNNGTCGTNN", "NNNNNCGTNNNGTCGTGN", "XNNNNNCGTNNNGTCGTGN")

gsub("\\GN", "-", perl=TRUE, test)

返回:

"---CTCGTNNNGTCGTNN"  "-----CGTNNNGTCGTGN"  "XNNNNNCGTNNNGTCGTGN"

正则表达式| R代码

\G,由 Perl(以及 PCRE (PHP)、Ruby、Python 的 PyPI 正则表达式引擎等)支持,断言当前位置在第一个匹配的字符串的开头,然后在前一个匹配的结尾。

如果字符串是"NNNCTCGTNNNGTCGTNN"前三个"N",每个都将被匹配(并用连字符替换gsub),那么匹配的尝试"C"将失败,终止匹配和字符串替换。


推荐阅读