正则表达式提取数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式提取数字相关的知识,希望对你有一定的参考价值。

有一个字符串ss12345rr3432re232,我想提取ss与rr之间的数字,应该怎么写?

var reg = /.*ss(\\d+)rr.*/;
var str = "";
str = str.replace(reg, "$1")

追问

那如果我想同时提取12345和3432这两组数据呢?

追答var reg = /\\d+/g;
var str = "ss12345rr3432re232";
var ms = str.match(reg)
ms[0] // 12345
ms[1] // 3431

参考技术A 一个简单的实现方法:
var regEx = /\d+/gi;
var str = 'data-period="151127022">022</td>';
var m=str.match(regEx);
document.write(m[0]);
思路:要提取的是数字串,所以用\d提取,提取后取第一个就可以了。
参考技术B 用\d+(?=rr)或者(?<=ss)\d+(?=rr)直接提取
或者ss(\d+)rr间接提取$1的值追问

那如果我想同时提取12345和3432这两组数据呢?

追答

把12345和3432数字部分全部变成(\d+)用$1$2分别提取数字部分

Bigquery 正则表达式在多个空格后提取数字

【中文标题】Bigquery 正则表达式在多个空格后提取数字【英文标题】:Bigquery regex extract digits after multiple spaces 【发布时间】:2021-07-27 07:04:44 【问题描述】:

您能否帮助使用以下示例行中的 regexp_extract 数字:

    11BARIIOTA0292DEBORAH(空格)OLLA(空格)JENNY(长多格)0000001242202173171(空格) 11SBADIOTA0300MICHELLE(空格)MARGARETE(长-多个空格)0040170225(空格) 11NITYIOTA0300SYAHLA(空格)RYAN(长多格)613821914423(空格)

进入:

    0000001642202173171 0040170225 613821914423

fyi:long-multiple 大约是 40-50 个空格

谢谢

【问题讨论】:

【参考方案1】:

考虑以下方法

select array_reverse(split(trim(col_name), ' '))[offset(0)]
from your_table         

如果应用于您问题中的样本数据 - 输出是

【讨论】:

什么是偏移量?顺便说一句,这很好用 ty 查看OFFSET and ORDINAL【参考方案2】:

对于以 1--多个空格结尾的行,“long-multiple-space”为 40-50 个空格。 以下是一些不同的匹配表达式,具体取决于您的需要... 匹配:^.* 40,50(\d+) +$ 替换:Group1 匹配:^[A-Z\d]+(?: [A-Z]+)1,2 40,50(\d+) +$ 替换:Group1 使用 regexp_extract,我认为语法看起来更像...regexp_extract(filename,'^.* 40,50(\d+) +$', 1)regexp_extract(filename,'^[A-Z\d]+(?: [A-Z]+)1,2 40,50(\d+) +$', 1) 1,2 匹配 1--2 个名称(如 Line1 上的 OLLA 和 JENNY)。 使用 1,9 匹配 1-9 个空格分隔的名称。 (对于 'long-multiple-spaces',与 40,50 相同)

【讨论】:

当名字大写时,我可以添加类似 (?: [a-zA-Z]+) 是吗? @Auffan 添加 a-z 也将匹配小写,但顶部表达式应该足够了。如果您需要非常具体,我只包括了较低的表达式。如果需要更具体,您可以在表达式中包含 IOTA,假设它在您的所有字符串中。【参考方案3】:

您可以将字符串转换为简单的空格分隔值,然后使用 regexp_extract 在该结果字符串之上提取数值。

select REGEXP_REPLACE(REGEXP_REPLACE("11BARIIOTA0292DEBORAH                  OLLA  JENNY                                                                                             0000001242202173171","  ",""),'[^0-9 ]','');

【讨论】:

以上是关于正则表达式提取数字的主要内容,如果未能解决你的问题,请参考以下文章

C++ 正则检测字串,提取数字以及字符

总结java regex 正则表达式 提取数字和去除数字,过滤数字,提取价格

php 正则表达式 提取字符串内小括号中的数字,只要数字

正则表达式提取带小数的多个数字

c# 正则表达式提取()中的值

JavaScript 正则表达式 - 从单词旁边提取数字