我有标题文字,例如“英国最危险的五大工作”。 我想查找包含单词“dangerous”的所有行和单词“UK”,它们之间的距离为3个单词。
与上述文字一样,它应符合我的条件,因为文字包含“危险”和“英国”字样,它们之间的距离也是3字。
我尝试了下面的语法:
SELECT PubName,Title
From emp.final_month
WHERE REGEXP_CONTAINS(Title,r'\b?(dangerous).*(UK)\b?')
(以上查询给出了所有包含“危险”和“英国”字样但不基于它们之间位置的内容。)
不确定如何在上述查询中放置位置。任何人都可以帮助获得BigQuery支持的正则表达式的正确语法。
也欢迎Regex中的语法。
答案 0 :(得分:2)
尝试以下方法作为方向的想法 - 它适用于BigQuery Standard SQL
#standardSQL
WITH `emp.final_month` AS (
SELECT 'Top 5 most dangerous jobs in the UK' AS title UNION ALL
SELECT 'Top most dangerous 5 jobs in the UK' AS title
),
words AS (
SELECT title, word, pos
FROM `emp.final_month`, UNNEST(REGEXP_EXTRACT_ALL(title, r'[\w_]+') ) AS word WITH OFFSET pos
WHERE word IN ('dangerous', 'UK')
ORDER BY title, pos
)
SELECT w1.title title
FROM words w1 JOIN words w2
ON w1.title = w2.title
AND w1.word != w2.word
AND w1.pos > w2.pos
GROUP BY title
HAVING MIN(w1.pos - w2.pos - 1) = 3
答案 1 :(得分:1)
你可以试试这个正则表达式:
\bdangerous\b (?:\w+[- ]){3}\bUK\b
请注意,它区分大小写,并且不会考虑“危险”之间的标点符号。和'英国'。
\bdangerous\b : the word 'dangerous' followed by a space
(?: ): a non-capturing group...
( \w+ ): consisting of one or more word characters...
( [- ]): followed by either a hyphen or a space...
{3}: repeated three times (i.e. three words)
\bUK\b: the word 'UK'