检查字符串中每个单词的哪些行是大写的并且 space 分隔
Check which rows with each word in a string are capitalised and space separated
我有一个包含值字符串的列,如下所示
a=["iam best in the world" "you are awesome" ,"Iam Good"]
并且我需要检查字符串中每个单词的哪些行是小写字母并由 space 分隔。
我知道如何将它们转换为大写和 space 分隔,但我需要找到哪些行是小写且 space 分隔。
我试过使用
grepl("\b([a-z])\s([a-z])\b",aa, perl = TRUE)
我们可以尝试使用 grepl
和模式 \b[a-z]+(?:\s+[a-z]+)*\b
:
matches = a[grepl("\b[a-z]+(?:\s+[a-z]+)*\b", a$some_col), ]
matches
v1 some_col
1 1 iam best in the world
2 2 you are awesome
数据:
a <- data.frame(v1=c(1:3),
some_col=c("iam best in the world", "you are awesome", "Iam Good"))
使用的正则表达式匹配一个 all-lowercase 词,然后是一个 space 和另一个 all-lowercase 词,后者重复零次或多次。请注意,我们在模式周围放置了单词边界,以确保我们不会从以大写字母开头的单词中获得错误的标志匹配。
x <- c("iam best in the word ", "you are awesome", "Iam Good")
这里我做了一些不同的事情,首先我用 space 分隔然后我检查是否是小写。因此,输出是每个短语的列表,只有小写单词被 space.
分割
sapply(strsplit(x, " "), function(x) {
x[grepl("^[a-z]", x)]
})
我们可以将列转换为lower-case并与实际值进行比较。使用@Tim 的数据
a[tolower(a$some_col) == a$some_col, ]
# v1 some_col
#1 1 iam best in the world
#2 2 you are awesome
如果我们还需要检查 space,我们可以添加另一个条件 grepl
a[tolower(a$some_col) == a$some_col & grepl("\s+", a$some_col), ]
另一个想法是使用 stringi
包中的 stri_trans_totitle
,
a[!!!stringi::stri_trans_totitle(as.character(a$some_col)) == a$some_col,]
# v1 some_col
#1 1 iam best in the world
#2 2 you are awesome
我们可以使用filter
library(dplyr)
a %>%
filter(tolower(some_col) == some_col)
# v1 some_col
#1 1 iam best in the world
#2 2 you are awesome
我有一个包含值字符串的列,如下所示
a=["iam best in the world" "you are awesome" ,"Iam Good"]
并且我需要检查字符串中每个单词的哪些行是小写字母并由 space 分隔。
我知道如何将它们转换为大写和 space 分隔,但我需要找到哪些行是小写且 space 分隔。
我试过使用
grepl("\b([a-z])\s([a-z])\b",aa, perl = TRUE)
我们可以尝试使用 grepl
和模式 \b[a-z]+(?:\s+[a-z]+)*\b
:
matches = a[grepl("\b[a-z]+(?:\s+[a-z]+)*\b", a$some_col), ]
matches
v1 some_col
1 1 iam best in the world
2 2 you are awesome
数据:
a <- data.frame(v1=c(1:3),
some_col=c("iam best in the world", "you are awesome", "Iam Good"))
使用的正则表达式匹配一个 all-lowercase 词,然后是一个 space 和另一个 all-lowercase 词,后者重复零次或多次。请注意,我们在模式周围放置了单词边界,以确保我们不会从以大写字母开头的单词中获得错误的标志匹配。
x <- c("iam best in the word ", "you are awesome", "Iam Good")
这里我做了一些不同的事情,首先我用 space 分隔然后我检查是否是小写。因此,输出是每个短语的列表,只有小写单词被 space.
分割sapply(strsplit(x, " "), function(x) {
x[grepl("^[a-z]", x)]
})
我们可以将列转换为lower-case并与实际值进行比较。使用@Tim 的数据
a[tolower(a$some_col) == a$some_col, ]
# v1 some_col
#1 1 iam best in the world
#2 2 you are awesome
如果我们还需要检查 space,我们可以添加另一个条件 grepl
a[tolower(a$some_col) == a$some_col & grepl("\s+", a$some_col), ]
另一个想法是使用 stringi
包中的 stri_trans_totitle
,
a[!!!stringi::stri_trans_totitle(as.character(a$some_col)) == a$some_col,]
# v1 some_col
#1 1 iam best in the world
#2 2 you are awesome
我们可以使用filter
library(dplyr)
a %>%
filter(tolower(some_col) == some_col)
# v1 some_col
#1 1 iam best in the world
#2 2 you are awesome