从字符串中删除括号
Posted
技术标签:
【中文标题】从字符串中删除括号【英文标题】:Remove parenthesis from a character string 【发布时间】:2012-03-16 00:11:24 【问题描述】:我正在尝试从 R 中的字符串中删除括号并遇到以下错误:
string <- "log(M)"
gsub("log", "", string) # Works just fine
gsub("log(", "", string) #breaks
# Error in gsub("log(", "", test) :
# invalid regular expression 'log(', reason 'Missing ')''
【问题讨论】:
【参考方案1】:用双反斜杠转义括号:
gsub("log\\(", "", string)
(必填:http://xkcd.com/234/)
【讨论】:
【参考方案2】:Ben 的回答为您提供了一种普遍适用的良好方法。
或者,在您的情况下,您可以使用 fixed=TRUE
参数,如下所示:
gsub("log(", "", string, fixed=TRUE)
# [1] "M)"
当gsub()
的pattern
参数是包含您要搜索的字符的文字序列的字符串时,它是合适的。然后,这很好,因为它允许您输入您正在搜索的确切模式,而无需转义等。
【讨论】:
@BenBolker -- 奇怪。它应该是fixed=TRUE
,但fixed="TRUE"
、fixed="true"
和fixed="True"
都可以。其他组合,如 fixed="TRue"
或 fixed="TruE"
不会。相关(?)我最近意识到rnorm("9")
(例如)有效,但我想说它不应该。 (FWIW,rnorm("9", "1")
不起作用。)我想知道这些情况是否与底层 C 代码处理传递给它的参数的方式有关。你怎么看?
有趣。答案在?as.logical
:‘as.logical’ attempts to coerce its argument to be of logical type. For ‘factor’s, this uses the ‘levels’ (labels). Like ‘as.vector’ it strips attributes including names. Character strings ‘c("T", "TRUE", "True", "true")’ are regarded as true, ‘c("F", "FALSE", "False", "false")’ as false, and all others as ‘NA’.
@BenBolker 很好的发现。我想知道在rnorm("9")
案例中是否存在某种相关/类似的转换,以及它是否只发生在第一个参数上,因为它是一个没有默认值的参数。刚刚检查了seq_len("9")
(作为想到的第一个.Primitive
函数),它显示出类似的行为......【参考方案3】:
如果您不是正则表达式专家(我们中的许多人都不是!),如果您的查询支持,我发现将删除不需要的文本和括号分开更直接。
这个问题似乎表明只想删除括号,所以你可以使用:
gsub(paste(c("[(]", "[)]"), collapse = "|"), "", string)
这导致字符串没有括号:“logM”
如果您还想删除“M”
gsub(paste(c("M", "[(]", "[)]"), collapse = "|"), "", string)
这导致结果“日志”
【讨论】:
以上是关于从字符串中删除括号的主要内容,如果未能解决你的问题,请参考以下文章