如何使用Java正则表达式提取以下数据?

时间:2015-08-19 09:23:02

标签: java regex hadoop apache-pig

如何使用常规表达式从下面给出的整个句子中获取第一个长数字:

396124450036269056,"@Anyi1987 asi fue,bano total para mi.,:D",MiriamBustam

我希望结果为:396124450036269056。 那么如何使用正则表达式表示整个句子中的数字? 我正在使用Apache Pig脚本语言,它使用Java正则表达式。 所以在Apace Pig:

REGEX_EXTRACT_ALL: 句法: REGEX_EXTRACT_ALL(字符串,正则表达式) 。使用REGEX_EXTRACT_ALL函数执行正则表达式匹配并提取所有匹配的组。

This example will return the tuple (192.168.1.5,8020).

REGEX_EXTRACT_ALL('192.168.1.5:8020', '(.*)\:(.*)');

REGEX_EXTRACT:

语法: REGEX_EXTRACT(字符串,正则表达式,索引)。 使用REGEX_EXTRACT函数执行正则表达式匹配并提取由index参数定义的匹配组(其中索引是基于1的参数。)

This example will return the string '192.168.1.5'.

REGEX_EXTRACT('192.168.1.5:8020', '(.*):(.*)', 1);

4 个答案:

答案 0 :(得分:1)

\d+

匹配所有数字字符。

因此在这种情况下匹配396124450036269056

这里不需要正则表达式。您可以使用substring()

s.substring(0, s.indexOf(","))

答案 1 :(得分:1)

我认为不存在与文本中最长数字匹配的常规表达式。 像\ d +或\ d *这样的表达式只会匹配第一个数字,无论有多少位数。所以如果你有" 55 msadmmsada 8882138213821321382183"那些表达式只匹配55。

答案 2 :(得分:0)

如果您的字符串始终以数字开头,只需使用(\d+) (see this at regex101)

这会将某些内容的所有数字提取到匹配的组中。所以,如果我理解你的例子,

REGEX_EXTRACT(you, '(\d+).*', 1);

会做的伎俩。如果此函数必须与整个文本匹配以提取内容,则只需附加.*,否则可以省略它。

答案 3 :(得分:0)

您可以使用:

\d*

它将匹配396124450036269056

  

<强>解释

     

\ d *匹配数字[0-9]

     

量词:*在零和无限时间之间