6

使用 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 流

4

3 回答 3

4

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

?因此,要解决您的问题,您应该通过在其后立即添加 a 来使 quanitifer 不贪心:

我的兄弟只是 .*?\\p{Punct}
                  ^

请注意,?此处的使用与用作量词不同,后者表示“匹配零或一”。

于 2010-07-19T21:08:15.797 回答
0

你有没有尝试过:.*(my brother just .*\\p{Punct})

看起来您的表达式希望该my brother部分成为字符串的开头,但在您的示例中,它位于字符串的中间,因此您必须考虑之前的所有内容my brother

于 2010-07-19T21:07:06.717 回答
0

您正在匹配 .* 这是...一切...尝试 [az]* 仅匹配字母

于 2010-07-19T21:09:34.043 回答