如何使用常规表达式从下面给出的整个句子中获取第一个长数字:
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);
答案 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]
量词:*在零和无限时间之间