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 中数字+字母组合的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章