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

siotufzp  于 2021-06-03  发布在  Hadoop
关注(0)|答案(4)|浏览(451)

如何使用正则表达式从下面给出的整个句子中获得第一个长数:

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

我要的结果是:396124450036269056。那么我如何用正则表达式来表示整个句子中的数字呢?我使用的是apachepig脚本语言,它使用java正则表达式。所以在快速Pig:
regex\u extract\u all:语法:regex\u extract\u all(string,regex)。使用regex\u extract\u all函数执行正则表达式匹配并提取所有匹配的组。

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

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

正则表达式提取:
语法:regex\u extract(string,regex,index)。使用regex\u extract函数执行正则表达式匹配,并提取由index参数(其中index是基于1的参数)定义的匹配组

This example will return the string '192.168.1.5'.

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

eh57zj3b1#

我认为不存在一个正则表达式来匹配文本中最长的数字。像\d+或\d*这样的表达式将只匹配第一个数字,而不管有多少个数字。因此,如果您有“55 msadmmsada 88821821338213821321382183”,那么这些表达式将只匹配55。

dhxwm5r4

dhxwm5r42#

\d+ 匹配所有数字字符。
所以是吻合的 396124450036269056 在这种情况下。
这里不需要正则表达式。你需要一个 substring() .

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

dgtucam13#

如果字符串总是以数字开头,只需使用 (\d+) (参见regex101)。
这将把某物开头的所有数字提取到一个匹配的组中。如果我能正确理解你的例子,

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

会成功的。您只需附加 .* 如果此函数必须匹配整个文本才能提取某些内容,否则可以忽略它。

bxjv4tth

bxjv4tth4#

您可以使用:

\d*

它将匹配396124450036269056
说明:
\d*匹配数字[0-9]
量词:*介于零次和无限次之间

相关问题