Metabase

RegexExtract

⚠️ تابع regexExtract برای MongoDB، SQLite و SQL Server در دسترس نیست و در Druid فقط روی درایور Druid‑JDBC کار می‌کند.

تابع regexExtract با استفاده از عبارات باقاعده (Regular expressions / Regex) بخشی از یک متن را استخراج می‌کند.

regexExtract برای متونی که ساختار مشخصی ندارند (مثل URLها یا پاسخ‌های متنیِ آزاد در نظرسنجی‌ها) بسیار مناسب است.
اگر با رشته‌هایی با قالب قابل پیش‌بینی کار می‌کنید (مثل SKU، ID، یا کدهای استاندارد)، بهتر است اول سراغ تابع ساده‌تر substring بروید.

می‌توانید از regexExtract برای ساخت ستون‌های سفارشی با لیبل‌های کوتاه و خوانا استفاده کنید، مثلاً برای:

  • منوهای کشویی فیلترها،
  • لیبل‌های چارت‌ها، یا
  • پارامترهای Embedding.
SyntaxExample
regexExtract(text, regular_expression)regexExtract("regexExtract", "ex(.*)")
بخشی از متن را با استفاده از یک عبارت باقاعده استخراج می‌کند."extract"

جستجو و پاک‌سازی متن

فرض کنید داده‌های وب با URLهای مختلف دارید و می‌خواهید هر URL را به یک نام کمپین کوتاه و خوانا نگاشت کنید:

URLCampaign Name
https://www.metabase.com/docs/?utm_campaign=alicealice
https://www.metabase.com/learn/?utm_campaign=neoneo
https://www.metabase.com/glossary/?utm_campaign=candycandy

می‌توانید ستونی سفارشی به نام Campaign Name با این عبارت بسازید:

regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")

در این‌جا، الگوی Regex ^[^?#]+\? همهٔ URLهای معتبر را تا قبل از علامت سؤال/هاش می‌گیرد. می‌توانید utm_campaign= را با هر پارامتر Query دیگری جایگزین کنید.
در انتهای الگو، گروه گیرنده (Capturing group) یعنی (.*) تمام کاراکترهایی را که بعد از پارامتر utm_campaign= می‌آیند، استخراج می‌کند.

حالا می‌توانید از ستون Campaign Name هرجا که لیبل تمیز لازم دارید استفاده کنید؛ مثل منوهای کشویی فیلترها، چارت‌ها، و پارامترهای Embedding.

انواع دادهٔ قابل قبول

نوع دادهسازگار با regexExtract
String
Number
Timestamp
Boolean
JSON

محدودیت‌ها

  • regexExtract برای MongoDB، SQLite و SQL Server در دسترس نیست.
  • در Druid فقط هنگام استفاده از درایور Druid‑JDBC کار می‌کند.

Regex می‌تواند «هنر سیاه» باشد؛ با احتیاط از آن استفاده کنید.

توابع مرتبط

در این بخش توابع و فرمول‌هایی را می‌بینید که رفتاری مشابه عبارت regexExtract در متابیس دارند، همراه با نکاتی برای انتخاب گزینهٔ مناسب.

عبارت‌های متابیس

ابزارهای دیگر

Substring

از substring زمانی استفاده کنید که متن شما ساختار ثابتی دارد (تعداد کاراکترها و ترتیب آن‌ها قابل پیش‌بینی است).

مثلاً برای استخراج پارامتر Query از URLهای نمونه، substring مناسب نیست؛ چون هم طول Path و هم طول نام پارامترها متغیر است.
اما اگر بخواهید فقط بخش بین https://www. و .com را بگیرید، می‌توانید هم از substring و هم از regexExtract استفاده کنید:

substring([URL], 13, 8)

یا:

regexExtract([URL], "^(?:https?:\/\/)?(?:[^@\/\n]+@)?(?:www\.)?([^:\/.\n]+)")

SQL

وقتی سؤالی را با notebook editor اجرا می‌کنید، متابیس تنظیمات گرافیکی شما (فیلترها، Summarize و …) را به یک کوئری تبدیل می‌کند و آن را روی دیتابیس اجرا می‌کند.

اگر دادهٔ نمونه را در PostgreSQL ذخیره کرده باشید:

SELECT
    url,
    SUBSTRING(url, '^[^?#]+\?utm_campaign=(.*)') AS campaign_name
FROM follow_the_white_rabbit

این کوئری معادل عبارت زیر در متابیس است:

regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")

Spreadsheets

اگر دادهٔ نمونه را در Spreadsheet داشته باشید و "URL" در ستون A باشد، فرمول زیر:

regexExtract(A2, "^[^?#]+\?utm_campaign=(.*)")

تقریباً همان سینتکس عبارت متابیس را دارد:

regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")

Python

اگر دادهٔ نمونه را در یک DataFrame به نام df نگه‌داری کنید:

df['Campaign Name'] = df['URL'].str.extract(r'^[^?#]+\?utm_campaign=(.*)')

این کد معادل عبارت زیر در متابیس است:

regexExtract([URL], "^[^?#]+\?utm_campaign=(.*)")

مطالعهٔ بیشتر