在 Bigquery 中看到“数字 + 一个字母 + [逗号或空格]”后提取字符串的正则表达式

Posted

技术标签:

【中文标题】在 Bigquery 中看到“数字 + 一个字母 + [逗号或空格]”后提取字符串的正则表达式【英文标题】:Regular Expression to extract string after seeing "number + one letter + [comma or whitespace]" in Bigquery 【发布时间】:2020-01-06 10:16:00 【问题描述】:

我正在尝试提取:

阿比格罗夫 阿比格罗夫 艾比路景观 艾比路 修道院露台 艾比伍德路 艾比格罗夫

来自

23a, Abbey Grove
43a Abbey Grove
Block 509a Abbey Road View
511 Abbey Road
Flat 8a, Abbey Terrace
14 Abbey Wood Road
100 Abbey Grove

在 Google Bigquery 中。问题是:

regexp_replace(text, '[^a-zA-Z]', '')

给了我两个 a 的“aabbeywood”。本质上,我只想将所有文本保留在“数字”或“数字加一个字母”字符串之后。

【问题讨论】:

您能添加更多输入示例吗? 【参考方案1】:
SELECT regexp_replace(t, '.*[0-9]+[a-zA-Z]?[^a-zA-Z]*', '') FROM UNNEST(['23a, Abbey Grove','43a Abbey Grove','Block 509a Abbey Road View','511 Abbey Road','Flat 8a, Abbey Terrace','14 Abbey Wood Road','100 Abbey Grove']) t

我试图用您的数据重现问题。对于这个特定的数据,它在BigQuery 中工作。

这个正则表达式可以翻译为:

    搜索任意字符零次或多次 搜索数字一次或多次 在 a 和 z(上下)之间搜索零个或一个字母 搜索任何非字母零次或多次的字符

您有一些不适用此正则表达式的不同情况,请告诉我。 希望对你有帮助

【讨论】:

【参考方案2】:

这并不容易,因为我不知道您的所有限制条件(例如,街道名称可以包含数字吗?数字前是否可以有除“Block”之外的其他词?)。这是适用于给定示例的正则表达式(您可以从 group3 获取街道名称):

^(Block )0,1([0-9]+[A-Z|a-z]0,1[,]0,1 )([a-z|A-Z| ]+)

有关示例,请参阅 this link。

【讨论】:

谢谢 Thibauld,是的,除了 Block 之外还可以有其他词,但街道名称中不能有任何数字 *我已将第二个块更新为“flat”以明确这一点。【参考方案3】:

请检查一下,也许它对你有帮助。

1) 创建一个函数

CREATE FUNCTION dbo.RemoveChars(@Input varchar(1000))
RETURNS VARCHAR(1000)
BEGIN
  DECLARE @pos INT
  SET @Pos = PATINDEX('%[^a-z A-Z]%',@Input)
  WHILE @Pos > 0
   BEGIN
    SET @Input = STUFF(@Input,@pos,1,'')
    SET @Pos = PATINDEX('%[^a-z A-Z]%',@Input)
   END
  RETURN @Input
END
GO

创建函数后在查询下运行

DECLARE @Tabel TABLE(
    Text VARCHAR(250)
)

INSERT INTO @Tabel 
VALUES('23a, Abbey Grove'),
('43a Abbey Grove'),
('Block 509a Abbey Road View'),
('511 Abbey Road'),
('Block 8a, Abbey Terrace'),
('14 Abbey Wood Road'),
('100 Abbey Grove')

SELECT dbo.RemoveChars(Text) AS Text FROM @Tabel

【讨论】:

谢谢吉山,我认为这段代码在 bigquery 中不起作用? 是的,我知道它在大查询中不起作用或会降低性能,但是当我们将数据存储在表中时,我们可以做一件事,我们可以将另一个文件放入表中并解析存储时按预期输出的数据我们选择我们创建的数据使用没有任何过程:) 我同意,但规范是在 bigquery 中提取:-p 好的,我会尝试一次而不是让你知道:)。

以上是关于在 Bigquery 中看到“数字 + 一个字母 + [逗号或空格]”后提取字符串的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 中流式传输数据

在 Java 中向 BigQuery 表的架构添加新列

在 BigQuery 中更新结构

Bigquery:我们应该在模式更新后等待多长时间才能流式传输数据?

是否可以从熊猫创建一个新的 Google BigQuery 表?

BigQuery 行限制