복붙노트

[HADOOP] 돼지의 정규 표현식

HADOOP

돼지의 정규 표현식

아파치 돼지와 텍스트 사용하기

hahahah.  my brother just didnt do anything wrong. He cheated on a test? no way!

나는 "내 동생이 방금 잘못한 것을하지 않았다"와 일치 시키려고 노력하고있다.

이상적으로는 "내 동생"으로 시작하고 문장 부호 (EOL)의 끝으로 끝나기를 원할 것입니다.

돼지 문서를보고, java.util.regex.Pattern에 대한 링크를 따라 가면, 나는 사용할 수 있어야한다고 생각한다.

extrctd = FOREACH fltr GENERATE FLATTEN(EXTRACT(txt,'(my brother just .*\\p{Punct})')) as (txt:chararray);

그러나 그것은 그 라인의 끝까지 일치하는 것처럼 보인다. 이 경기를 수행하기위한 제안 사항이 있습니까? 나는 내 머리카락을 꺼낼 준비가되어 있고, 내 머리카락을 꺼내서 파이썬 스트리밍으로 전환해야한다.

해결법

  1. ==============================

    1.기본적으로 한정 기호는 욕심이 있습니다. 이는 가능한 한 많이 일치한다는 것을 의미합니다. 이 경우 첫 번째 구두점까지만 일치 시키려고합니다. 다른 말로하면 가능한 조금 일치시키고 싶습니다.

    기본적으로 한정 기호는 욕심이 있습니다. 이는 가능한 한 많이 일치한다는 것을 의미합니다. 이 경우 첫 번째 구두점까지만 일치 시키려고합니다. 다른 말로하면 가능한 조금 일치시키고 싶습니다.

    그래서 문제를 해결하려면 quanitifer에 욕심이 없도록 a를 추가해야합니다. 그 직후 :

    my brother just .*?\\p{Punct}
                      ^
    

    ? 여기서 '0 또는 1과 일치'를 의미하는 한정 기호로 사용하는 것과 다릅니다.

  2. ==============================

    2.시도해 봤어 :. * (내 동생 그냥. * \\ p {Punct})

    시도해 봤어 :. * (내 동생 그냥. * \\ p {Punct})

    귀하의 표현이 내 동생이 문자열의 시작 부분이되기를 원하는 것처럼 보입니다. 그러나 귀하의 예에서는 문자열의 중간에 있으므로 동생 앞에서 모든 것을 설명해야합니다.

  3. ==============================

    3.일치하는. *은 ... 모든 것 ... [az] *를 문자와 만 일치 시키려고 시도하십시오.

    일치하는. *은 ... 모든 것 ... [az] *를 문자와 만 일치 시키려고 시도하십시오.

  4. from https://stackoverflow.com/questions/3285082/regexp-matching-in-pig by cc-by-sa and MIT license