2016-10-25 3 views
0

일련의 키워드가있는 텍스트가 있습니다.단어의 배열에 단어를 연속적으로 모으는 정규식

예 :

Text: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 

FooKeyword: Foo 
AnotherKeyword: Yay! 

나는 키워드 일치뿐만 아니라 모든 텍스트 다음 키워드에 이르는 할 수 있어야합니다.

그래서 같은 :

Match 1: 
Group[0] = FooKeyword 
Group[1] = Foo 

는 지금까지 내가 무엇을 가지고 :

[\s\S]?(Text:|FooKeyword:|AnotherKeyword:).* 

는 대부분 작동하지만 문제는 그것이 새로운 라인을 위해 작동하지 않습니다. 각 키워드 사이에 모든 것을 수집해야합니다. 어떻게해야합니까?

는 여기에 내가 무엇을 시도했다의 예 : https://regex101.com/r/zkLoYZ/6

+0

예상되는 결과는 무엇입니까? – guest271314

+0

@ guest271314 아래에 있습니다. "이렇게 무언가가 있습니다." – CodingMadeEasy

답변

1

이 작업을 시도 할 수 있습니다 : /(Keyword\d+): ?(.+?)(?=\nKeyword|$)/gs

여기에 작업을 참조하십시오 https://regex101.com/r/zkLoYZ/1.

[편집] 추가 설명 : 당신은 내가 (Keyword1:|Keyword2:|Keyword3:)

  • (Keyword\d+)에 내가 존재에 의해 각 섹션을 감지하여 최적화 된 multilines에게
  • 을 치료하기 위해 원하는

    • s 플래그가 여기에 매우 중요하다 새 줄 시작 또는 문자열 끝 ($)
    • 의 다음 'Keyword' (3210)는 ? 게으른 할 수 있습니다 learn more here

    [편집] 후 질문 편집을 의미 (.+?)에서 positive lookahead

  • 입니다.

    별개의 키워드를 사용하려는 경우 동일한 정규 표현식 패턴을 유지하면서 (Keyword\d+) 대신 이전에 생성 된 키워드 목록을 |으로 구분하여 실제와 같이 바꿀 수 있습니다. 생성 된 /(Text|FooKeyword|AnotherKeyword): ?(.+?)(?=\nText|FooKeyword|AnotherKeyword|$)/ 여기처럼 작동 악화에 따라서

    : 사실 방법을 이전 캡처를 다시 옆에 맞게 키워드가 아니기 때문에 : https://regex101.com/r/zkLoYZ/4 이제

    당신이 \1와 경기를 재사용 할 수 있어야한다 나를 시도하지하자 방금 통과 한 것과 정규식 기억에서와 같은 것.

    그래서 (Text|FooKeyword|AnotherKeyword): ?(.+?)(?=\n(Text|FooKeyword|AnotherKeyword)|$)은 정규식을 사용하는 가장 좋은 방법입니다.JS s 플래그와

    들어


    [편집] 정규 표현식은 조금 더 복잡 할 수 없습니다.

    /(Project|Feature|Scenario|Given|When|Then|#Task): ?((?:\s|\w)+?)(?=\n(?:Project|Feature|Scenario|Given|When|Then|#Task)|$)/gim

    i 플래그는 필수는 아니지만 나는 그것을 추천합니다.

    예 : 여기를 참조하십시오. https://regex101.com/r/zkLoYZ/9

  • +0

    신속한 답변에 감사드립니다. 나는 더 좋은 예를 써야했다. Keyword1, Keyword2 및 Keyword3은 모든 키워드가 될 수 있습니다. 나는 그걸 단순함으로 넣었습니다. 귀하의 정규식으로 나는 양쪽에 모든 키워드를 복제해야 할 것 같습니다. – CodingMadeEasy

    +0

    오, 네, 그게 내가 하하 이해. 어쨌든 그건 내 대답을 편집하게 해줄거야. – antoni

    +0

    키워드 중복없이이를 수행 할 수있는 방법이 있습니까? – CodingMadeEasy

    관련 문제