代码之家  ›  专栏  ›  技术社区  ›  Neil Kodner

生猪中的regexp匹配

  •  6
  • Neil Kodner  · 技术社区  · 14 年前

    使用apache pig和文本

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

    我想和“我弟弟没做错什么”。

    理想情况下,我想匹配任何以“我哥哥只是”开头,以标点符号(句尾)或EOL结尾的内容。

    查看pig文档,然后按照java.util.regex.pattern的链接,我认为我应该能够使用

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

    但这似乎一直到最后。有什么建议吗?我准备拔出我的头发,拔出我的头发,我的意思是切换到Python流

    3 回复  |  直到 14 年前
        1
  •  4
  •   Mark Byers    14 年前

    量词默认为 greedy . 这意味着它们尽可能匹配。在这种情况下,您只希望匹配到第一个标点符号。换句话说,你希望尽可能少地匹配。

    所以为了解决你的问题,你应该通过添加一个 ? 紧接着:

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

    注意使用 ? 这里与它作为量词的用法不同,量词的意思是“匹配零或一”。

        2
  •  0
  •   FrustratedWithFormsDesigner    14 年前

    你试过了吗? .*(my brother just .*\\p{Punct})

    看起来你的表情想要 my brother 部分是字符串的开头,但在您的示例中,它位于字符串的中间,因此您必须对之前的所有内容进行说明。 我的兄弟 .

        3
  •  0
  •   FlyingStreudel    14 年前

    你是匹配的。*这是…一切…尝试[az]*只匹配字母