使用apache pig和文本
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);
但这似乎匹配到行尾。有关执行此匹配的任何建议吗?我已经准备好把头发拉出来了,把头发拉出来,我的意思是转换成python流式传输
答案 0 :(得分:4)
默认情况下,量词是greedy。这意味着它们尽可能匹配。在这种情况下,您只想匹配第一个标点符号。换句话说,你想尽可能少地匹配。
因此,为了解决您的问题,您应该立即在?
之后添加?
,以使quanitifer非贪婪:
my brother just .*?\\p{Punct} ^
请注意,此处{{1}}的使用与量词的使用不同,即“匹配零或一”。
答案 1 :(得分:0)
您是否尝试过:.*(my brother just .*\\p{Punct})
看起来你的表达式希望my brother
部分是字符串的开头,但在你的例子中,它位于字符串的中间,所以你必须考虑my brother
之前的所有内容。< / p>
答案 2 :(得分:0)
你正在匹配。*这就是......所有......尝试[az] *来匹配字母