正则表达式提取数字
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 ]','');
【讨论】:
以上是关于正则表达式提取数字的主要内容,如果未能解决你的问题,请参考以下文章