programing

문자열에 문자가 있는지 테스트합니다.

easyjava 2023. 4. 9. 22:31
반응형

문자열에 문자가 있는지 테스트합니다.

문자열이 다른 문자열의 하위 집합인지 확인하려고 합니다.예를 들어 다음과 같습니다.

chars <- "test"
value <- "es"

하고 TRUE만일"일 경우.value됩니다.chars에서는 false:를 ." 거짓을 말하다

chars <- "test"
value <- "et"

하다를 사용하세요.grepl

grepl( needle, haystack, fixed = TRUE)

다음과 같이 합니다.

grepl(value, chars, fixed = TRUE)
# TRUE

?grepl참の참

정답.

하아, 이 간단한 질문에 대한 답을 찾는데 45분이 걸렸습니다.은 '하다, 하다, 하다'입니다.grepl(needle, haystack, fixed=TRUE)

# Correct
> grepl("1+2", "1+2", fixed=TRUE)
[1] TRUE
> grepl("1+2", "123+456", fixed=TRUE)
[1] FALSE

# Incorrect
> grepl("1+2", "1+2")
[1] FALSE
> grepl("1+2", "123+456")
[1] TRUE

해석

greplinux 실행 파일의 이름을 따온 것입니다.이 파일 자체는 "Global Regular Expression Print"의 약어입니다.입력 행을 읽고 지정한 인수와 일치하는 경우 출력합니다."Global"은 입력 라인의 어느 곳에서나 일치할 수 있음을 의미합니다.아래에서 "정규식"에 대해 설명하겠습니다만, 스트링을 매칭하는 것이 보다 스마트한 방법입니다(R은 이것을 "문자"라고 부릅니다).class("abc")커맨드 라인 프로그램이기 때문에, 출력을 출력하는 것은 출력 문자열로 출력하는 것을 의미합니다.

이제 ㅇㅇ, ㅇㅇ.grep프로그램은 기본적으로 입력 라인에서 출력 라인까지의 필터입니다.의 R은 R인 것 요.grep함수도 마찬가지로 입력 배열을 사용합니다.전혀 알 수 없는 이유(R을 가지고 놀기 시작한 지 1시간 정도밖에 안 됨)로 인해 일치하는 인덱스의 벡터가 반환되고 일치 목록이 반환되지 않습니다.

하지만 원래 질문으로 돌아가서, 우리가 정말로 원하는 것은 건초더미에서 바늘을 찾았는지 여부입니다. 참/거짓 값입니다.은 이 함수에 을 붙이기로 한 것 .grepl"grep"에서와 같이 "논리" 반환값(참 및 거짓 논리값 호출:class(TRUE)를 참조해 주세요.

이제 우리는 그 이름이 어디서 왔고 무엇을 해야 하는지 알게 되었습니다.이치노인수는 문자열이지만 정규 표현(이후: regex)을 작성하기 위해 사용됩니다.이 정의가에 들지 않으면 두십시오).regex는 문자열에 대응합니다.들어 regex 입니다.a 일치합니다."a" , " "a* 일치합니다."a" 회 0 의 「」, 「」가 됩니다.a+성격과 일치할 것이다."a" 위의은 '바늘'입니다.1+2정규식으로 취급할 때는 "1개 이상의 1 뒤에 2"를 의미하지만, 우리 것은 플러스입니다!

정규식으로서 1+2

만약에 '이거 '이거'를 썼을 거예요.grepl「」를 하지 않고fixed바늘이 우연히 건초더미처럼 쌓이게 되어 자주 작동하게 되어 OP의 예에서도 효과가 있는 것을 알 수 있습니다.하지만 그건 잠복해 있는 벌레야!은 정규식이, 정규식이 문자열입니다.fixed를 위한 것입니다.★★★★★★★★★★★★★★★★★?르겠어 、 ////// b/c 아마 외우기 전에 5번 더 찾아봐야 할 거예요.

몇 가지 마지막 생각

암호가 더 좋을수록 더 적은 역사를 알아야 의미를 알 수 있습니다.문서 목록 9는 2^9=는 2^9=는 2^9=문서 목록입니다.이러한 함수를 분리한다(이러한 함수를 결합하고, 서로에 대한 의존성을 제거하며, 문자열 사물은 정규식 사물과 벡터 사물은 다르다).이치 사용자에게 잘못된 코드 사용 방법을 제공하지 마십시오. 즉, 문제가 있는 호출은 논리적으로 무의미하지 않고 구조적으로 무의미해야 합니다(존재하지 않는 옵션을 전달하는 등).은유적으로 말하면, 10층 현관문을 벽으로 바꾸는 것이 사용을 경고하는 간판을 거는 것보다 낫지만, 어느 쪽도 사용하지 않는 것보다는 낫다.이에, 이 이 하고 싶은 그 합니다). 기대했던 하지 않습니다.)이러한 순환 의존성으로 인해 시스템이 빠르게 정체되어 기대했던 이점을 얻을 수 없게 됩니다.) 것은 를 모호한 것은 디자인상의 결점입니다.TRUE ★★★★★★★★★★★★★★★★★」0 ★★★★★★★★★★★★★★★★★」"abc"모두 벡터입니다.

싶다grepl:

> chars <- "test"
> value <- "es"
> grepl(value, chars)
[1] TRUE
> chars <- "test"
> value <- "et"
> grepl(value, chars)
[1] FALSE

또한 stringr 라이브러리를 사용하여 수행할 수 있습니다.

> library(stringr)
> chars <- "test"
> value <- "es"
> str_detect(chars, value)
[1] TRUE

### For multiple value case:
> value <- c("es", "l", "est", "a", "test")
> str_detect(chars, value)
[1]  TRUE FALSE  TRUE FALSE  TRUE

은 하다에서 사용합니다.stringi★★★★★★★★★★★★★★★★★★:

> stri_detect_fixed("test",c("et","es"))
[1] FALSE  TRUE

일부 벤치마크:

library(stringi)
set.seed(123L)
value <- stri_rand_strings(10000, ceiling(runif(10000, 1, 100))) # 10000 random ASCII strings
head(value)

chars <- "es"
library(microbenchmark)
microbenchmark(
   grepl(chars, value),
   grepl(chars, value, fixed=TRUE),
   grepl(chars, value, perl=TRUE),
   stri_detect_fixed(value, chars),
   stri_detect_regex(value, chars)
)
## Unit: milliseconds
##                               expr       min        lq    median        uq       max neval
##                grepl(chars, value) 13.682876 13.943184 14.057991 14.295423 15.443530   100
##  grepl(chars, value, fixed = TRUE)  5.071617  5.110779  5.281498  5.523421 45.243791   100
##   grepl(chars, value, perl = TRUE)  1.835558  1.873280  1.956974  2.259203  3.506741   100
##    stri_detect_fixed(value, chars)  1.191403  1.233287  1.309720  1.510677  2.821284   100
##    stri_detect_regex(value, chars)  6.043537  6.154198  6.273506  6.447714  7.884380   100

문자열(또는 문자열 세트)에 여러 개의 하위 문자열이 포함되어 있는지 확인하고 싶은 경우에 대비하여 두 개의 하위 문자열 사이에 "|"를 사용할 수도 있습니다.

>substring="as|at"
>string_vector=c("ass","ear","eye","heat") 
>grepl(substring,string_vector)

얻을 수 있을 것이다

[1]  TRUE FALSE FALSE  TRUE

첫 번째 단어는 하위 문자열 "as"를 가지며 마지막 단어는 하위 문자열 "at"를 포함하므로

grep ★★★★★★★★★★★★★★★★★」grepl 정규 표현을 사용할지 여부에 유의하십시오.

" " " 입니다.grep및 related는 리터럴 서브스트링이 아닌 일치하는 정규 표현을 사용합니다.예상하지 못한 상태에서 유효하지 않은 regex와 일치하려고 하면 작동하지 않습니다.

> grep("[", "abc[")
Error in grep("[", "abc[") : 
  invalid regular expression '[', reason 'Missing ']''

테스트를 하려면 , 「 」를 합니다.fixed = TRUE.

> grep("[", "abc[", fixed = TRUE)
[1] 1

regex를 원하신다면 좋습니다만, 작전부에서는 그렇게 요청하지 않은 것 같습니다.

하시면 됩니다.grep

grep("es", "Test")
[1] 1
grep("et", "Test")
integer(0)

여기서도 같은 문제: 문자열과 키워드 목록을 지정하면 문자열에 포함된 키워드(있는 경우)를 검출합니다.

이 스레드의 권장 사항은 다음과 같습니다.stringr의 »str_detect ★★★★★★★★★★★★★★★★★」grepl아래는 델의 벤치마크입니다.microbenchmark★★★★★★★★★★★★★★★★★★:

사용.

map_keywords = c("once", "twice", "few")
t = "yes but only a few times"

mapper1 <- function (x) {
  r = str_detect(x, map_keywords)
}

mapper2 <- function (x) {
  r = sapply(map_keywords, function (k) grepl(k, x, fixed = T))
}

그리고 나서.

microbenchmark(mapper1(t), mapper2(t), times = 5000)

발견하다

Unit: microseconds
       expr    min     lq     mean  median      uq      max neval
 mapper1(t) 26.401 27.988 31.32951 28.8430 29.5225 2091.476  5000
 mapper2(t) 19.289 20.767 24.94484 23.7725 24.6220 1011.837  5000

바와 같이 5000을 사용한 은 5됩니다.str_detect ★★★★★★★★★★★★★★★★★」greplgrepl가 좋다str_detect.

벡터입니다.r문자열에 포함되는 키워드(있는 경우)를 나타냅니다.

때문에 저는 라,음, 음음음음음음음음음음을 사용하는 것을 추천합니다.grepl이치노

언급URL : https://stackoverflow.com/questions/10128617/test-if-characters-are-in-a-string

반응형