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

Regex 如何找到模式是否在字符串中,regex,r,Regex,R,我有一些字符串,我想将每个字符串转换成一个数字,所以我想使用正则表达式。我的字符串可以是以下字符串之一: ["star"] ["near-star"] ["shared"] ["near-shared"] ["complete"] ["near-complete"] ["null"] ["near-null"] 我的问题是这两种说法都是正确的: > grepl("star", "[\"near-star\"]") [1] TRUE > grepl("near-star", "[\"

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

["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
这也适用于其他标签。。。任何关于如何编写与每个标签匹配的正确代码的建议都是非常感谢的

致以最良好的祝愿,
Simone

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

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

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

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

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

给定数据:

> 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\"]"       

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

给定数据:

> 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\"]"       

其他人提到了只使用因子或
固定的
参数(这两个参数中的任何一个都适用于您所陈述的问题)。但一般来说,如果要匹配字符串或模式,但只有在它前面没有给定字符串时,才可以使用negative look behind,这是Perl正则表达式中的一个扩展:

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

>test grepl(“(?其他人提到了仅使用因子或
固定的
参数(这两个参数中的任何一个都适用于您所述的问题)。但一般来说,如果要匹配字符串或模式,但只有在它前面没有给定字符串时,才可以使用负look behind,这是Perl正则表达式中的一个扩展:

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

>test grepl(”(?在我看来,这个问题需要一个正则表达式教程,而不是一个简单的答案。你说的“将每个字符串转换成一个数字”是什么意思?我看不到任何数字…如果您想将N个不同的字符串转换为数字1到N,则可以通过因子…您可以使用
==
测试字符串的绝对相等性“star”==“near star”
返回
FALSE
。在我看来,这个问题需要一个正则表达式教程,而不是一个简单的答案。你说的“将每个字符串转换为一个数字”是什么意思?我看不到任何数字…如果您想将N个不同的字符串转换为数字1到N,那么您可以通过因子…您可以使用
==
“星”==“近星”
返回
FALSE
,测试字符串的绝对相等性。