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

How to use Java Regular Expressions to extract the following data?

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

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

我想要的结果是:396124450036269056。 那么如何使用正则表达式表示整个句子中的数字呢? 我正在使用使用 Java 正则表达式的 Apache 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参数定义的匹配组(其中index为从1开始的参数)

This example will return the string '192.168.1.5'.

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

\d+

匹配所有数字字符。

因此在这种情况下它匹配 396124450036269056

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

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

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

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

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

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

您可以使用:

\d*

它将匹配 396124450036269056

Explanation:

\d* match a digit [0-9]

Quantifier: * Between zero and unlimited times

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