删除R中字符串和括号之间的所有字符
remove all characters between string and bracket in R
假设我有一个数据框 df,其中 df$strings 列包含
这样的字符串
[cat 00.04;09]
[cat 00.04;10]
等等。我想删除 "[cat" 和 "]" 之间的所有字符以产生
[cat]
[cat]
我已经尝试使用 gsub 进行此操作,但它不起作用,我不确定我做错了什么:
gsub('cat*?\]', '', df)
请注意,cat*?\]
patten 匹配 ca
,然后是任何 0+ t
个字符,但尽可能少,然后是 ]
.
您想在 [cat
和 ]
之间匹配 ]
以外的任何字符:
gsub('\[cat[^]]*\]', '[cat]', df$strings)
这里,
\[
- 匹配 [
cat
- 匹配 cat
[^]]*
- ]
以外的 0+ 个字符(请注意,括号表达式内的 ]
放在开头时不应转义 - 否则,如果你转义它,您将需要添加 perl=TRUE
参数,因为 PCRE 正则表达式引擎可以处理括号表达式内的正则表达式转义(不是默认的 TRE))
\]
- a ]
(你甚至不需要转义它,你可以只使用 ]
)。
参见 R demo:
x <- c("[cat 00.04;09]", "[cat 00.04;10]")
gsub('\[cat[^]]*\]', '[cat]', x)
## => [1] "[cat]" "[cat]"
如果cat
可以是任何单词,使用
gsub('\[(\w+)[^]]*\]', '[\1]', x)
其中 (\w+)
是 ID=1 的捕获组,匹配 1 个或多个字符,替换模式中的 \1
是代表组值的替换反向引用。
假设我有一个数据框 df,其中 df$strings 列包含
这样的字符串[cat 00.04;09]
[cat 00.04;10]
等等。我想删除 "[cat" 和 "]" 之间的所有字符以产生
[cat]
[cat]
我已经尝试使用 gsub 进行此操作,但它不起作用,我不确定我做错了什么:
gsub('cat*?\]', '', df)
请注意,cat*?\]
patten 匹配 ca
,然后是任何 0+ t
个字符,但尽可能少,然后是 ]
.
您想在 [cat
和 ]
之间匹配 ]
以外的任何字符:
gsub('\[cat[^]]*\]', '[cat]', df$strings)
这里,
\[
- 匹配[
cat
- 匹配cat
[^]]*
-]
以外的 0+ 个字符(请注意,括号表达式内的]
放在开头时不应转义 - 否则,如果你转义它,您将需要添加perl=TRUE
参数,因为 PCRE 正则表达式引擎可以处理括号表达式内的正则表达式转义(不是默认的 TRE))\]
- a]
(你甚至不需要转义它,你可以只使用]
)。
参见 R demo:
x <- c("[cat 00.04;09]", "[cat 00.04;10]")
gsub('\[cat[^]]*\]', '[cat]', x)
## => [1] "[cat]" "[cat]"
如果cat
可以是任何单词,使用
gsub('\[(\w+)[^]]*\]', '[\1]', x)
其中 (\w+)
是 ID=1 的捕获组,匹配 1 个或多个字符,替换模式中的 \1
是代表组值的替换反向引用。