# #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 Я обновляю свой ответ вашим новым тестом.