我有一个字符串,格式如下:
星期六,2011年7月9日05:38:24 gmt
我会有这样的输出:
2011年7月9日05:38:24
谢谢。
[编辑]我尝试过很多解决方案,但都有错误。我将重新解释这个问题。我有一个xml文件,其中有一个节点:tue,05 jul 2011 10:10:30 gmt,我想从中提取两个分开的字符串,如上图所示。我尝试过以下代码:
register /usr/lib/pig/piggybank.jar;
items = LOAD ' depeche/2011_7_10_12_30_rss.txt' USING org.apache.pig.piggybank.storage.XMLLoader('item') AS (item:chararray);
source_name = FOREACH items GENERATE REGEX_EXTRACT(item, '<link>(.*)</link>', 1) AS link:chararray,
REGEX_EXTRACT(item, '<title>(.*)</title>', 1) AS title:chararray,
REGEX_EXTRACT(item, '<description>(.*)</description>', 1) AS description:chararray,
REGEX_EXTRACT(item, '<pubDate>(.*)</pubDate>', 1) AS pubdate:chararray,
sortie = FOREACH pubdate GENERATE SUBSTRING((chararray)$0, 4, 25);
illustrate sortie;
错误:
[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 21, column 333> mismatched input '=' expecting SEMI_COLON
1条答案
按热度按时间egmofgnx1#
编辑答案:
这个例子更清楚一点。。。我抓起一个rss提要示例,做了一个快速测试。下面的代码使用了一个包含上面示例中所有元素的示例。不过,我使用regex\u extract而不是substring来获取pubdate。
--rss.Pig
--rss.txt文件
rss.pig的结果:
原始答案:
这里有几种方法可以使用,所以我将介绍两种方法:substring和regex\u extract。
如果字符串长度是常量,则可以使用内置子字符串函数。把它想象成
cut
命令。OUTPUT = FOREACH INPUT GENERATE SUBSTRING((chararray)$0, 4, 25);
否则,您可以使用内置的regex\u extract来提取您要查找的字符串。在这个例子中,我想到的最简单的正则表达式匹配是从字符串的第一个数字开始,最后一个数字结束,捕获中间的所有字符。OUTPUT = FOREACH INPUT GENERATE REGEX_EXTRACT((chararray)$0, '([\d].*[\d])', 1);