Ошибка: большой запрос REGEX_EXTRACT Невозможно проанализировать регулярное выражение: недопустимый оператор perl: (? < - PullRequest
0 голосов
/ 01 ноября 2018

Моя попытка извлечь # 2 из # 1 в BigQuery

REGEXP_EXTRACT(",\"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki\"", r"(?<=,\")[a-zA-Z0-9]*")

# 1 Строка, из которой я пытаюсь извлечь

,"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki"

# 2 Ожидаемый результат REGEX_EXTRACT

AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki

Может кто-нибудь помочь мне в Regex правильно экранировать кавычки и скобки, чтобы извлечь # 2 из # 1?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

ниже приведен пример для BigQuery Standard SQL

#standardSQL
WITH `project.dataset.table` AS (
  SELECT ",\"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki\"" string1
)
SELECT REGEXP_EXTRACT(string1, r'([a-zA-Z0-9]+)') string2
FROM `project.dataset.table`

с результатом

Row string2  
1   AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki     

или просто

SELECT REGEXP_EXTRACT(",\"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki\"", r'([a-zA-Z0-9]+)')

Кстати, примечание: BigQuery обеспечивает поддержку регулярных выражений с использованием библиотеки re2 - где (?<=re) не поддерживается. Между тем, из вашего примера не ясно, зачем вам это нужно, так как приведенные выше примеры работают без него

Между тем, если вы ищете регулярное выражение, которое ближе всего к вашему (в вопросе) - вы можете использовать r'(?:,\")([a-zA-Z0-9]*)', как в примере ниже

SELECT REGEXP_EXTRACT(",\"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki\"", r'(?:,\")([a-zA-Z0-9]*)')
0 голосов
/ 01 ноября 2018

Я подозреваю, что ошибка связана с вашим внешним видом, который REGEX_EXTRACT не поддерживает. Одним из решений может быть использование REGEX_REPLACE с группой захвата:

REGEXP_REPLACE(col, r",\"([a-zA-Z0-9]*)\"", "\\1")

Здесь я предполагаю, что col будет иметь значение вроде:

,"AQk8tmAg94ZUZwqYKd6kHrswiVZR0wKNuTvSpr6COCLpki"

, который вы упомянули в своем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...