如何查找模式是否在字符串中

时间:2014-02-05 18:14:33

标签: regex r

我有一些字符串,我想转换一个数字中的每个字符串,所以我想使用正则表达式。我的字符串可以是:

["star"]
["near-star"]
["shared"]
["near-shared"]
["complete"]
["near-complete"]
["null"]
["near-null"]

我的问题是这两个陈述都是真的:

> grepl("star", "[\"near-star\"]")
[1] TRUE
> grepl("near-star", "[\"near-star\"]")
[1] TRUE

这也适用于其他标签...非常感谢任何有关如何编写正确代码以匹配每个标签的建议。

最好的问候, 西蒙

3 个答案:

答案 0 :(得分:3)

尝试回答我认为可能是您真正的问题(将每个字符串“转换为”一个数字)......

鉴于数据:

> strings = c('["star"]', '["near-stat"]', '["shared"]', '["near-shared"]')
> data = sample(strings,20,TRUE)

这样:

> head(data)
[1] "[\"near-stat\"]"   "[\"star\"]"        "[\"near-shared\"]"
[4] "[\"near-shared\"]" "[\"shared\"]"      "[\"star\"]"       

简单地说:

> dataf=factor(data)
> as.numeric(dataf)
 [1] 2 4 1 1 3 4 1 2 2 1 2 3 4 4 3 4 4 1 1 4

映射由:

给出
> levels(dataf)
[1] "[\"near-shared\"]" "[\"near-stat\"]"   "[\"shared\"]"     
[4] "[\"star\"]"       

答案 1 :(得分:2)

其他人提到只使用因子或fixed参数(其中任何一个都适用于您所陈述的问题)。但一般来说,如果你想匹配一个字符串或模式,但只有在它没有给定字符串之前,那么你可以使用负面外观,Perl正则表达式中的扩展:

> test <- c('star','near-star')
> grepl('(?<!near-)star', test, perl=TRUE )
[1]  TRUE FALSE

这里的正则表达式表示匹配字符串“star”,但前提是不在字符串“near-”之前。帮助页面?regexp包含详细信息(您需要几乎一直滚动到底部)。

答案 2 :(得分:1)

您可以在模式中包含方括号和引号。此外,您可以使用fixed = TRUE按原样匹配字符串。

> grepl("[\"star\"]", "[\"near-star\"]", fixed = TRUE)
[1] FALSE
> grepl("[\"star\"]", "[\"star\"]", fixed = TRUE)
[1] TRUE