google-bigquery - 如何使用 Bigquery regexp_extract 提取字符串
问题描述
我试图解析的文本
文本:sometext herex0D 名称:Davidx0D 更多文本:x0D - value1x0D - 谷歌地图找到 x0D x0D 你做了什么:x0D - 我做了一些东西 x0D
我要提取的文本是后面的任何内容
你做了什么:
所以结果应该是
x0D - 我做了一些东西 x0D
这就是我所拥有的,但它并没有返回我想要的。
select REGEXP_EXTRACT('Text: sometext herex0D Name: Davidx0D some more text: x0D - value1x0D - google maps to find x0D x0D What you did: x0D - i did some stuff x0D', r"What you did:(.*)")
但是,如果您按原样运行它,它将返回正确的结果,因为我在查询中粘贴了字符串。但是,如果我用表中的列名替换字符串,那么它就不起作用了。我只得到
x0D
背部
解决方案
下面是 BigQuery 标准 SQL 的示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT ''''Text: sometext herex0D Name: Davidx0D some more text: x0D - value1x0D - google maps to find x0D x0D What you did: x0D
i did some stuff x0D''' str
)
SELECT
REGEXP_EXTRACT(str, r"What you did:(.*)") result,
SUBSTR(str, STRPOS(str, "What you did:") + LENGTH("What you did:")) adjusted_result
FROM `project.dataset.table`
Row result adjusted_result
1 x0D x0D i did some stuff x0D
更新
因此,在您的表格中,您有带有新行的字符串,在正则表达式解析期间需要考虑
默认情况下.
不匹配\n
要使其正常工作,您需要使用s
如下 标志
#standardSQL
WITH `project.dataset.table` AS (
SELECT ''''Text: sometext herex0D Name: Davidx0D some more text: x0D - value1x0D - google maps to find x0D x0D What you did: x0D
i did some stuff x0D''' str
)
SELECT
REGEXP_EXTRACT(str, r"What you did:(.*)") result,
REGEXP_EXTRACT(str, r"(?s)What you did:(.*)") multiline_result
FROM `project.dataset.table`
结果
Row result multiline_result
1 x0D x0D i did some stuff x0D
推荐阅读
- java - Java ArrayDeque push() 似乎添加到堆栈的前/尾 [潜在错误]
- python - 使用 Python 中的多处理使嵌套函数并行运行
- c# - 条件运算符的行为不符合预期
- c# - 设备日期时间 - Xamarin 应用程序
- python - 具有有序编码的 LabelEncoder
- python - 在任何地方使用资源运行 Python 脚本
- angular - 当使用延迟加载 mat-tab 内容时
,在 mat-tab 内容中路由组件被初始化(构造函数和 Init)两次 - python - Python:查找列表中的异常值
- java - MinecraftForge 1.12 readImagetoBuffer 错误
- java - Spring异步请求处理