如何编写用于在 grepl 中检查字符串中是否存在非常规字符的函数?
How to write a function for checking a string for unconventional characters in grepl?
我创建了一个简单的 grepl 函数来检查字符串是否长于或等于 8 个字符并且不包含空格。对于我的目的来说,这似乎是过于自由的思想。我如何使 grepl 函数检查是否只有字母和数字,而没有包含在字符串中的任何其他符号?
下面的函数 return 当字符串的长度不是至少 8 个字符并且包含任何空格时为 FALSE。
check_the_string <- function(x){
if(nchar(x) >= 8){
if(grepl("(\s+)", x) == TRUE) {
FALSE
} else {
TRUE
}
} else {FALSE}
}
我不太了解 grepl 中的条件是如何工作的。我尝试将 grepl("[:punct:]", x)
和 grepl("^[:punct:]+$", x)
置于 grepl 条件中以检查任何符号,并使用 [:alnum:]
代替 [:punct:]
以检查是否只有字母,但这些似乎总是 return 错误。
我会对具体的解决方案感到满意,或者只是朝着正确的方向推动解决该问题。
确保整个字符串为字母数字的正则表达式是 "^[[:alnum:]]+$"
。 ^
表示“匹配字符串的开头”,然后 [[:alnum:]]+
表示“匹配任意数量的字母数字字符”,然后 $
表示“匹配字符串的结尾”。因此,如果字符串的开头和结尾之间有字母数字字符以外的任何字符,您将无法匹配。
您还可以稍微简化一下您的逻辑。写if(grepl("blah", x) == TRUE) FALSE else TRUE
只是写!grepl("blah", x)
的路漫漫其修远兮。此外,您可以使用 &
运算符来测试两个逻辑测试是否为 TRUE
,而不是分支 if
语句
所以你的函数变成了一行:
check_the_string <- function(x) nchar(x) >= 8 & grepl("^[[:alnum:]]+$", x)
我们可以在几个字符串上进行测试:
# More than 8 characters but contains a space
check_the_string("hello world")
#> [1] FALSE
# More than 8 characters but contains punctuation
check_the_string("helloworld!")
#> [1] FALSE
# Less than 8 characters
check_the_string("hello")
#> [1] FALSE
# More than 8 characters - letters only
check_the_string("HelloWorld")
#> [1] TRUE
# More than 8 characters - letters and numbers
check_the_string("HelloWorld2020")
#> [1] TRUE
我创建了一个简单的 grepl 函数来检查字符串是否长于或等于 8 个字符并且不包含空格。对于我的目的来说,这似乎是过于自由的思想。我如何使 grepl 函数检查是否只有字母和数字,而没有包含在字符串中的任何其他符号?
下面的函数 return 当字符串的长度不是至少 8 个字符并且包含任何空格时为 FALSE。
check_the_string <- function(x){
if(nchar(x) >= 8){
if(grepl("(\s+)", x) == TRUE) {
FALSE
} else {
TRUE
}
} else {FALSE}
}
我不太了解 grepl 中的条件是如何工作的。我尝试将 grepl("[:punct:]", x)
和 grepl("^[:punct:]+$", x)
置于 grepl 条件中以检查任何符号,并使用 [:alnum:]
代替 [:punct:]
以检查是否只有字母,但这些似乎总是 return 错误。
我会对具体的解决方案感到满意,或者只是朝着正确的方向推动解决该问题。
确保整个字符串为字母数字的正则表达式是 "^[[:alnum:]]+$"
。 ^
表示“匹配字符串的开头”,然后 [[:alnum:]]+
表示“匹配任意数量的字母数字字符”,然后 $
表示“匹配字符串的结尾”。因此,如果字符串的开头和结尾之间有字母数字字符以外的任何字符,您将无法匹配。
您还可以稍微简化一下您的逻辑。写if(grepl("blah", x) == TRUE) FALSE else TRUE
只是写!grepl("blah", x)
的路漫漫其修远兮。此外,您可以使用 &
运算符来测试两个逻辑测试是否为 TRUE
if
语句
所以你的函数变成了一行:
check_the_string <- function(x) nchar(x) >= 8 & grepl("^[[:alnum:]]+$", x)
我们可以在几个字符串上进行测试:
# More than 8 characters but contains a space
check_the_string("hello world")
#> [1] FALSE
# More than 8 characters but contains punctuation
check_the_string("helloworld!")
#> [1] FALSE
# Less than 8 characters
check_the_string("hello")
#> [1] FALSE
# More than 8 characters - letters only
check_the_string("HelloWorld")
#> [1] TRUE
# More than 8 characters - letters and numbers
check_the_string("HelloWorld2020")
#> [1] TRUE