我不确定如何使用regexp_replace返回字符串中间的数字。
我目前的字符串是:"权力的游戏S2 Ep6"我需要从中返回季节编号。我当前的正则表达式正确地完成了工作,但需要两个正则表达式:
REGEXP_REPLACE(REGEXP_REPLACE('Game of Thrones S1 Ep12', r'(^[^_]*\sS)', ''), r'(\s*Ep\s*\d*\s*$)', '')
其他一些测试条目是:
" Smallville S 10 Ep 12"
"我们生命的日子S26 Ep324"
这首先删除文本,包括第一个" S&#34 ;. 然后在#34; Ep"
之前将字符串的末尾分开并包括空格。有人可以给我一个捕获组,允许在一次替换中完成。目前这是一个非常昂贵的查询。
答案 0 :(得分:3)
在季节编号(\d+)
周围使用捕获组,并替换为反向引用('\1'
):
REGEXP_REPLACE('Game of Thrones S1 Ep12', r'^[^\n_]*\sS\s*(\d+)\s*Ep\s*\d*\s*$', r'\1')
请注意,我只是扩展您自己的正则表达式,您可能还需要检查r'^.*\sS\s*(\d+).*'
正则表达式,它将获得最后一个空格+ S
,后面有一个或多个数字。
请参阅regex demo
答案 1 :(得分:1)
您需要使用REGEXP_EXTRACT功能,而不是REGEXP_REPLACE。 使用标准SQL,示例查询如下所示:
select regexp_extract(text, r'[sS][ ]*(\d+)') from (
select text from unnest(["Smallville S 10 Ep 12", "The Days of Our Lives S26 Ep324"]) text)
然后返回
Row f0_
1 10
2 26