регулярное выражение большой запрос извлечение числового значения из URL

# #regex #google-bigquery

Вопрос:

Здравствуйте, я пытаюсь извлечь 7digit с большим запросом для извлечения 2670782 и 2670788 из этих данных

данные на полях ниже

 is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type 8888888 specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing 8888888 software like Aldus PageMaker including versions of Lorem Ipsum.

>> https://hello.com/pudding/answer/2670782?hl=enamp;ref_topic=7072943
>> https://hello.com/pudding/answer/2670788?hl=enamp;ref_topic=7072943
 

У меня есть запрос, но в данных есть и другой номер 7digit, кроме 2670782 и 2670788. поэтому сначала я хотел проверить, начинается ли строка с «>>>» и включает ли «hello.com» и я могу извлечь его.

Вот запрос, который у меня есть, но он также захватит 8888888, которого не должно быть.

 SELECT
 desc,
 REGEXP_EXTRACT_ALL(desc, r"/(d{7})") AS num
FROM
 `table`
WHERE
 REGEXP_CONTAINS(DESCRIPTION, r"(>> )")
 AND REGEXP_CONTAINS(desc, r"(hello.com)")
 

Я считаю, что мне нужно проверить, начинается ли строка с >>> и содержит ли она hello.com в одной формуле регулярного выражения, а затем я могу извлечь 7-значное число после /. Я застрял, так что
Любая помощь будет очень признательна!!

Комментарии:

1. Я заблудился. Являются ли данные образца одной строкой, несколькими строками? Что вы имеете в виду, «если строка начинается с >>>»?

2. В ответе KaBoom попробуйте добавить a (:?m) в начале регулярного ^ выражения, чтобы оно соответствовало началу строки и новой строке.

Ответ №1:

Вы можете использовать это регулярное выражение, если каждый из ваших входных данных состоит из одной строки

 ^>>. hello.com. /(d{7})
 

Я тестирую это регулярное выражение в regex101.com с вашим вводом и предположением о вводе в 1 строку

ОБНОВЛЕНИЕ: Вы можете заменить «>>>» символом новой строки, а затем использовать приведенное ниже регулярное выражение для извлечения числа

 hello.com. /(d{7})
 

Вот пример:

 WITH
  sample AS (
  SELECT
    '''start here not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing 8888888 software like Aldus PageMaker including versions of Lorem Ipsum. >> hello.com/pudding/answer/2670782?hl=enamp;ref_topic=7072943 >> hello.com/pudding/answer/2670788?hl=enamp;ref_topic=7072943
''' AS txt
  UNION ALL
  SELECT
    '''
is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type 8888888 specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing 8888888 software like Aldus PageMaker including versions of Lorem Ipsum.

>> https://hello.com/pudding/answer/2670786?hl=enamp;ref_topic=7072943
>> https://hello.com/pudding/answer/2670785?hl=enamp;ref_topic=7072943
'''),
  sample_new_line AS (
  SELECT
    REGEXP_REPLACE(txt, '>>', 'n') AS txt
  FROM
    sample)
SELECT
  REGEXP_EXTRACT_ALL(txt, r"hello.com. /(d{7})") AS num
FROM
  sample_new_line;
 

Комментарии:

1. это не работает, когда я пытаюсь иметь несколько строк, здесь должен быть ввод ……………..здесь начинаются не только пять веков, но и скачок в электронный набор текста, оставаясь по сути неизменным. Он был популяризирован в 1960-х годах с выпуском листов Letraset, содержащих отрывки Lorem Ipsum, и совсем недавно с программным обеспечением для настольных издательств 8888888, таким как Aldus PageMaker, включая версии Lorem Ipsum. >>> >> hello.com/pudding/answer/2670782?hl=enamp;ref_topic=7072943 >>> >> hello.com/pudding/answer/2670788?hl=enamp;ref_topic=7072943

2. Добавьте это в начало строки регулярного (:?m) выражения . Это позволяет стрелке вверх начинать строку или начинать строку.

3. @lipo Я обновляю свой ответ вашим новым тестом.