Bigquery 中数字+字母组合的正则表达式

Posted

技术标签:

【中文标题】Bigquery 中数字+字母组合的正则表达式【英文标题】:Regular Expression for Number+Letter combinations in Bigquery 【发布时间】:2020-01-06 01:14:12 【问题描述】:

我正在尝试从以下序列中提取 2A、6B、8、9A、33、65c、84。

从逻辑上讲,这似乎需要在逗号或空格之前将任何数字 [0-9] 附加到单个字母。

2A, Beech Avenue 
Flat 6B Earl's Court Drive 
8 Ripley Drive 
9A, Grosvenor Park Way, Thirsk 
33, Dover Priory 
Block 65c,Earl's Avenue 
84, Wayfair Drive 

据我所知,这是提取数字的代码,但单个字母和空格被证明极具挑战性:

REGEXP_REPLACE('[^0-9]', '') FROM list

【问题讨论】:

提取还是删除?请显示想要的结果 我希望提取以下列表:2A、6B、8、9A、33、65c、84 我无法理解为什么这会被否决或为什么有人会投票关闭。 【参考方案1】:

一种方法是regexp_extract()regexp_replace()的组合:

 select str,
       REGEXP_REPLACE(regexp_extract(str, r'^[0-9]+[A-Za-z]?[\W]|[\W][0-9]+[A-Za-z]?$|[\W][0-9]+[A-Za-z]?[\W]'), r'[\W]', '')
from (select '2A, Beech Avenue' as str union all
      select 'Flat 6B Earl\'s Court Drive' as str union all
      select '8 Ripley Drive' as str union all
      select '9A, Grosvenor Park Way, Thirsk' union all
      select '33, Dover Priory' as str union all
      select 'Block 65c,Earl\'s Avenue' as str union all
      select '84, Wayfair Drive'
     ) x

【讨论】:

谢谢 Gordon,我认为这不小心抓住了逗号,还漏掉了 65c 等小写字母? @JonathanFrancis。 . . regexp_replace() 解决了逗号(和其他单词分隔符)的问题。我修正了逻辑以获得更一般的数字。 谢谢 Gordon,我仍然有关于“65c”的问题(由于小写 c) - 有什么想法吗? @JonathanFrancis。 . .我调整了答案。

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

6到20位数字和字母组合 正则表达式

js验证只能输入字母,数字或字母数字组合正则表达式

js验证只能输入字母,数字或字母数字组合正则表达式

js的正则表达式要求必须字母与数字组合至少有一个大写字母,要怎么写

正则表达式仅查找数字+文本的字母数字组合,无特殊

C#正则表达式判断是不是是数字,是不是含有中文,是不是是数字字母组合