Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在不考虑序列的情况下确定字符串是否包含某些字符?_R_String - Fatal编程技术网

R 如何在不考虑序列的情况下确定字符串是否包含某些字符?

R 如何在不考虑序列的情况下确定字符串是否包含某些字符?,r,string,R,String,我试图使用另一个向量中的元素与R匹配一个名称,但我不知道在R中使用grep时如何转义序列 我希望输出是一条河,但我不知道怎么做。在模式中使用。* grep("Cry.*River", string, value = TRUE) #[1] "Cry Me A River" 或者,如果您得到的是原样的名称,并且无法更改,则可以在空白处拆分,并在以下单词之间插入。* grep(paste(strsplit(name, "\\s+")[[1]], collapse = ".*"), string, v

我试图使用另一个向量中的元素与R匹配一个名称,但我不知道在R中使用grep时如何转义序列

我希望输出是一条河,但我不知道怎么做。

在模式中使用。*

grep("Cry.*River", string, value = TRUE)
#[1] "Cry Me A River"
或者,如果您得到的是原样的名称,并且无法更改,则可以在空白处拆分,并在以下单词之间插入。*

grep(paste(strsplit(name, "\\s+")[[1]], collapse = ".*"), string, value = TRUE)
其中正则表达式按以下方式构造

strsplit(name, "\\s+")[[1]]
#[1] "Cry"   "River"

paste(strsplit(name, "\\s+")[[1]], collapse = ".*")
#[1] "Cry.*River"

下面是一个使用grepl的基本R选项:

然后,我们迭代每个术语,并使用grepl检查该术语是否出现在每个字符串中。最后,我们只保留包含所有术语的匹配项。

我们可以对拆分的字符串执行grepl,并将逻辑向量列表缩减为单个logicalvector`并提取'string'中的匹配元素

string[Reduce(`&`, lapply(strsplit(name, " ")[[1]], grepl, string))]
#[1] "Cry Me A River"
另外,我们可以插入带有子元素的.*来代替strsplit


这里有一个使用stringr的方法。秩序重要吗?案例重要吗?匹配整个单词很重要吗。如果你只想以任何顺序匹配“Cry”和“River”,而不关心这个案例

name <- "Cry River"
string <- c("Yesterday Once More",
"Are You happy",
"Cry Me A River", 
"Take me to the River or I'll Cry", 
"The Cryogenic River Rag",
"Crying on the Riverside")

string[str_detect(string, pattern = regex('\\bcry\\b', ignore_case = TRUE)) & 
             str_detect(string, regex('\\bRiver\\b', ignore_case = TRUE))]

非常感谢。另外,如果上面的字符串实际上是数据帧中的一列,那么我必须首先转换它吗?@staifmis108不需要。您可以使用df$column_name而不是string,其中df是数据帧的名称,column_name是列的名称。
\bCry\b and \bRiver\b
string[Reduce(`&`, lapply(strsplit(name, " ")[[1]], grepl, string))]
#[1] "Cry Me A River"
grep(sub(" ", ".*", name), string, value = TRUE)
#[1] "Cry Me A River"
name <- "Cry River"
string <- c("Yesterday Once More",
"Are You happy",
"Cry Me A River", 
"Take me to the River or I'll Cry", 
"The Cryogenic River Rag",
"Crying on the Riverside")

string[str_detect(string, pattern = regex('\\bcry\\b', ignore_case = TRUE)) & 
             str_detect(string, regex('\\bRiver\\b', ignore_case = TRUE))]