我有一些字符串,我想转换一个数字中的每个字符串,所以我想使用正则表达式。我的字符串可以是:
["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
这也适用于其他标签...非常感谢任何有关如何编写正确代码以匹配每个标签的建议。
最好的问候, 西蒙
答案 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