r의 문자열에서 패턴의 겹치는 위치 가져 오기

AWaddington

객관적인:

겹침이 허용 된 문자열에서 패턴의 모든 위치 (시작 및 끝 인덱스)를 찾습니다.

접근하다:

stri_locate_all_*함수는 문자열에서 패턴의 위치 목록을 반환합니다. 목록에는 각 일치 위치에 대한 시작 인덱스와 끝 인덱스가 포함 된 행렬이 포함됩니다. 이것은 내 목적에 편리합니다.

고정 패턴의 경우 다음이 잘 작동합니다.

s <- "---"
pattern <- "--"
stri_locate_all_fixed(s, pattern, overlap = TRUE)
[[1]]
    start   end
[1,]    1   2
[1,]    2   3

문자열 "s"에 패턴 "-"이 두 번 나타납니다. 첫 번째는 s의 인덱스 1에서 시작하여 인덱스 2에서 끝납니다. 두 번째는 인덱스 2에서 시작하여 인덱스 3에서 끝납니다.

---
---

그러나 제 경우에는 패턴이 여러 개의 허용 가능한 문자 (순서 또는 조합)로 구성 될 수 있으며 패턴의 길이가 변경 될 수 있습니다. 따라서 "정규식"이 "고정"보다 적절 해 보입니다.

"-"와 "1"의 조합 (즉, "-1", "1-", "-", "11")과 stri_locate_all_regex.

pattern <- "[1|-]{2}"
s <- "-1-"    
stri_locate_all_regex(s, pattern)
[[1]]
    start   end
[1,]    1   2

stri_locate_all_regex패턴이 조정해야합니다, 그래서 내가 중복을 캡처 할 경우, 중복 속성을 사용하지 않습니다.

다양한 출처에 따르면 정규식에 긍정적 인 예견을 추가해야합니다.

pattern <- "(?=[1|-]{2})"

이 패턴은 패턴 의 겹치는 발생을 찾아야 합니다 (그리고 regex101 테스터 에서 테스트 할 때 수행합니다 ).

그러나 stri_locate_all_regex반환 값을 사용할 때 내가 찾고있는 것이 아닙니다.

stri_locate_all_regex("---", "(?=[1|-]{2})")
[[1]]
     start end
[1,]     1   0
[2,]     2   1

여기서 함수는 두 개의 일치 항목이 있음을 올바르게 식별하고 시작 인덱스를 기록했지만 종료 인덱스가 시작 인덱스보다 낮습니다.

Stringi 문서 상태 :

"stri_locate _ * _ regex의 경우 일치 길이가 0이면 끝은 시작보다 한 문자가 적습니다."

이것은 일치하는 길이가 0임을 나타냅니다. 이 관찰은 regex "lookarounds"에 대한 다음 설명에 의해 추가로 지원됩니다 .

"Lookahead와 lookbehind는 총칭하여"lookaround "라고하며 길이가 0 인 어설 션입니다. lookaround는 실제로 문자와 일치하지만 일치를 포기하고 결과 만 반환합니다. 일치 또는 일치하지 않음."

따라서 내 문제는 "시작"색인에서 길이가 0 인 위치를 반환하는 것처럼 보이는 긍정적 인 예견 주장을 사용하는 것 같습니다.

내 증류 된 질문 :

-겹치는 (길이가 0이 아닌) 일치 항목을 캡처하는 더 나은 정규 표현식 방법이 있습니까? 또는,

- stri_locate_all_regex원하는 출력을 얻는 것보다 더 나은 r 함수가 있습니까 (문자열에서 일치하는 패턴의 모든 시작 / 종료 위치 목록)

감사!

Wiktor Stribiżew

gregexpr전체 긍정 예측 패턴을 포함하는 캡처 그룹과 함께 및 PCRE 정규식을 사용할 수 있습니다 .

pattern <- "(?=([1-]{2}))"
s <- "-1-"
res <- gregexpr(pattern, s, perl=TRUE)
starts <- attr(res[[1]],'capture.start') 
lengths <- attr(res[[1]],'capture.length')
ends <- starts + lengths - 1
df_positions <- do.call(rbind, Map(data.frame, start=starts, end=ends, length=lengths))
df_positions

산출:

  start end length
1     1   2      2
2     2   3      2

참조 R 데모

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

특정 위치의 문자열에서 값 가져 오기

분류에서Dev

Pyspark에서 특정 위치 뒤의 하위 문자열 위치 가져 오기

분류에서Dev

패턴이있는 자바 스크립트의 문자열에서 하위 문자열 가져 오기

분류에서Dev

겹치는 2 개의 날짜 / 시간 범위에서 시간 가져 오기

분류에서Dev

문자열에서 일치 전후의 문자 가져 오기

분류에서Dev

Perl : 문자열에서 요소의 위치와 길이 가져 오기

분류에서Dev

Google Maps Javascript API의 겹치는 레이어에서 정보 가져 오기

분류에서Dev

특정 위치에서 C #의 문자열의 일부를 가져 오는 정규식 또는 기타 방법

분류에서Dev

RexEx로 일치하는 문자열의 하위 문자열 만 가져 오기

분류에서Dev

겹치는 패턴을 기반으로 문자열의 일부 제거

분류에서Dev

정규식에서 일치하는 문자열의 색인 가져 오기

분류에서Dev

JTextArea에서 캐럿 위치의 XY 위치 가져 오기

분류에서Dev

Java의 문자열에서 하위 문자열 가져 오기

분류에서Dev

사용자 위치 근처의 위치 가져 오기

분류에서Dev

문자열에서 패턴과 일치하는 문자열 배열 가져 오기

분류에서Dev

Windows 배치 : 루프에서 가변 길이의 하위 문자열 가져 오기

분류에서Dev

JSONNET 배열에서 요소의 위치 가져 오기

분류에서Dev

vuejs의 배열에서 일치 범위 값 가져 오기

분류에서Dev

Python에서 파일 설명 자의 위치 가져 오기

분류에서Dev

Meteor 앱에서 사용자의 위치 정보 가져 오기

분류에서Dev

R의 열 이름과 일치하는 부분 문자열 문자형 벡터가있는 열에서 레코드 가져 오기

분류에서Dev

날짜 범위가있는 2 개의 데이터 프레임에서 겹치지 않는 기간 가져 오기

분류에서Dev

클립 보드에있는 파일의 위치 가져 오기

분류에서Dev

Javascript에서 다른 위치의 오프셋 가져 오기

분류에서Dev

문자열의 패턴을 일치시키기 위해 R에서 함수 수집

분류에서Dev

일치 패턴 내에서 케이스 클래스의 일치 인스턴스를 가져 오는 방법

분류에서Dev

겹치는 지 여부에 관계없이 패턴의 모든 발생 찾기

분류에서Dev

UICollectionView의 셀에서 imageView의 위치 가져 오기

분류에서Dev

겹치는 위도 경도 도메인의 포락선 (또는 경계) 가져 오기

Related 관련 기사

  1. 1

    특정 위치의 문자열에서 값 가져 오기

  2. 2

    Pyspark에서 특정 위치 뒤의 하위 문자열 위치 가져 오기

  3. 3

    패턴이있는 자바 스크립트의 문자열에서 하위 문자열 가져 오기

  4. 4

    겹치는 2 개의 날짜 / 시간 범위에서 시간 가져 오기

  5. 5

    문자열에서 일치 전후의 문자 가져 오기

  6. 6

    Perl : 문자열에서 요소의 위치와 길이 가져 오기

  7. 7

    Google Maps Javascript API의 겹치는 레이어에서 정보 가져 오기

  8. 8

    특정 위치에서 C #의 문자열의 일부를 가져 오는 정규식 또는 기타 방법

  9. 9

    RexEx로 일치하는 문자열의 하위 문자열 만 가져 오기

  10. 10

    겹치는 패턴을 기반으로 문자열의 일부 제거

  11. 11

    정규식에서 일치하는 문자열의 색인 가져 오기

  12. 12

    JTextArea에서 캐럿 위치의 XY 위치 가져 오기

  13. 13

    Java의 문자열에서 하위 문자열 가져 오기

  14. 14

    사용자 위치 근처의 위치 가져 오기

  15. 15

    문자열에서 패턴과 일치하는 문자열 배열 가져 오기

  16. 16

    Windows 배치 : 루프에서 가변 길이의 하위 문자열 가져 오기

  17. 17

    JSONNET 배열에서 요소의 위치 가져 오기

  18. 18

    vuejs의 배열에서 일치 범위 값 가져 오기

  19. 19

    Python에서 파일 설명 자의 위치 가져 오기

  20. 20

    Meteor 앱에서 사용자의 위치 정보 가져 오기

  21. 21

    R의 열 이름과 일치하는 부분 문자열 문자형 벡터가있는 열에서 레코드 가져 오기

  22. 22

    날짜 범위가있는 2 개의 데이터 프레임에서 겹치지 않는 기간 가져 오기

  23. 23

    클립 보드에있는 파일의 위치 가져 오기

  24. 24

    Javascript에서 다른 위치의 오프셋 가져 오기

  25. 25

    문자열의 패턴을 일치시키기 위해 R에서 함수 수집

  26. 26

    일치 패턴 내에서 케이스 클래스의 일치 인스턴스를 가져 오는 방법

  27. 27

    겹치는 지 여부에 관계없이 패턴의 모든 발생 찾기

  28. 28

    UICollectionView의 셀에서 imageView의 위치 가져 오기

  29. 29

    겹치는 위도 경도 도메인의 포락선 (또는 경계) 가져 오기

뜨겁다태그

보관