فهرست مطالب
هرگز نمی توانید بفهمید که چرا عبارات منظم در فرمول های اکسل پشتیبانی نمی شوند؟ اکنون، آنها هستند :) با توابع سفارشی ما، می توانید به راحتی رشته هایی را که با یک الگوی خاص مطابقت دارند پیدا، جایگزین، استخراج و حذف کنید.
در نگاه اول، اکسل همه چیزهایی را که برای رشته متن نیاز دارید را دارد. دستکاری. هوم... در مورد عبارات منظم چطور؟ اوه، هیچ توابع Regex داخلی در اکسل وجود ندارد. اما هیچ کس نمی گوید که ما نمی توانیم موارد خودمان را ایجاد کنیم :)
عبارات منظم چیست؟
یک عبارت منظم (با نام مستعار regex یا regexp ) یک دنباله رمزگذاری شده ویژه از کاراکترها است که یک الگوی جستجو را تعریف می کند. با استفاده از آن الگو، می توانید یک ترکیب کاراکتر منطبق را در یک رشته پیدا کنید یا ورودی داده را تأیید کنید. اگر با نمادهای عام آشنا هستید، می توانید regexes را به عنوان یک نسخه پیشرفته از حروف عام در نظر بگیرید.
عبارات منظم دارای نحو خاص خود هستند که از کاراکترها، عملگرها و ساختارهای ویژه تشکیل شده است. برای مثال، [0-5] با هر رقمی از 0 تا 5 مطابقت دارد.
عبارات منظم در بسیاری از زبان های برنامه نویسی از جمله جاوا اسکریپت و VBA استفاده می شود. مورد دوم دارای یک شی RegExp ویژه است که ما از آن برای ایجاد توابع سفارشی خود استفاده خواهیم کرد.
آیا اکسل از regex پشتیبانی می کند؟
متأسفانه، هیچ توابع Regex داخلی در اکسل وجود ندارد. برای اینکه بتوانید از عبارات منظم در فرمول های خود استفاده کنید، باید تابع تعریف شده توسط کاربر خود را ایجاد کنید (VBAآرگومانها:
=IF(RegExpMatch(A5, $A$2), "Yes", "No")
برای نمونههای بیشتر فرمول، لطفاً ببینید:
- نحوه تطبیق رشتهها با استفاده از عبارات منظم
- تأیید سنجی داده های اکسل با regexes
عملکرد Excel Regex Extract
عملکرد RegExpExtract زیررشته هایی را جستجو می کند که با یک عبارت منظم مطابقت دارند و همه موارد مطابق یا را استخراج می کند. تطابق خاص.
RegExpExtract(متن، الگو، [instance_num]، [match_case])Where:
- Text (ضروری) - رشته متنی برای جستجو in.
- Pattern (الزامی) - عبارت منظم برای مطابقت.
- Instance_num (اختیاری) - یک شماره سریال که نشان می دهد کدام نمونه باید استخراج کردن. اگر حذف شود، همه موارد منطبق پیدا شده (پیشفرض) را برمیگرداند.
- Match_case (اختیاری) - تعیین میکند که با حروف متن مطابقت شود (TRUE یا حذف شده) یا نادیده گرفته شود (FALSE).
شما می توانید کد تابع را از اینجا دریافت کنید.
مثال: چگونه رشته ها را با استفاده از عبارات منظم استخراج کنیم
با مثال خود کمی جلوتر، بیایید اعداد فاکتور را استخراج کنیم. برای این کار، از یک regex بسیار ساده استفاده می کنیم که با هر عدد 7 رقمی مطابقت دارد:
Pattern : \b\d{7}\b
Put با الگوی A2 کار را با این فرمول فشرده و زیبا انجام خواهید داد:
=RegExpExtract(A5, $A$2)
اگر الگوی مطابقت داشته باشد، فرمول یک شماره فاکتور را استخراج می کند، اگر مطابقت پیدا نشد - هیچ چیز برگردانده نمی شود.
برای مثال های بیشتر، لطفاً ببینید: نحوه استخراج رشته ها در اکسلبا استفاده از regex.
Excel Regex Replace تابع
تابع RegExpReplace مقادیر مطابق با یک regex را با متنی که شما مشخص کرده اید جایگزین می کند.
RegExpReplace(متن، الگو، جایگزینی , [instance_num], [match_case])Where:
- Text (الزامی) - رشته متنی برای جستجو.
- Pattern (الزامی) - عبارت منظم برای مطابقت.
- جایگزینی (الزامی) - متنی برای جایگزینی زیر رشته های منطبق با.
- Instance_num (اختیاری) - نمونه ای که باید جایگزین شود. پیشفرض «همه منطبقها» است.
- Match_case (اختیاری) - کنترل میکند که آیا حروف نوشتاری مطابقت داشته باشد (درست یا حذف شده) یا نادیده گرفته شود (FALSE).
کد تابع در اینجا موجود است.
مثال: نحوه جایگزینی یا حذف رشته ها با استفاده از regexes
برخی از سوابق ما حاوی شماره کارت اعتباری هستند. این اطلاعات محرمانه است و ممکن است بخواهید آن را با چیزی جایگزین کنید یا به طور کلی حذف کنید. هر دو کار را می توان با کمک تابع RegExpReplace انجام داد. چگونه؟ در سناریوی دوم، ما با یک رشته خالی جایگزین میشویم.
در جدول نمونه ما، همه شمارههای کارت دارای 16 رقم هستند که در 4 گروه از هم جدا شده با فاصله نوشته میشوند. برای یافتن آنها، الگو را با استفاده از این عبارت منظم تکرار می کنیم:
Pattern : \b\d{4} \d{4} \d{4} \d{4}\ b
برای جایگزینی، از رشته زیر استفاده می شود:
جایگزینی : XXXX XXXX XXXXXXXX
و در اینجا یک فرمول کامل برای جایگزینی شماره کارت اعتباری با اطلاعات غیر حساس وجود دارد:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX")
با regex و متن جایگزین در سلولهای جداگانه ( A2 و B2)، فرمول به همان اندازه خوب کار می کند:
در اکسل، "حذف" یک مورد خاص از "جایگزین کردن" است. برای حذف شماره کارت اعتباری، فقط از یک رشته خالی ("") برای آرگومان جایگزین استفاده کنید:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "")
نکته. برای به دست آوردن ریگ خطوط خالی در نتایج، می توانید از تابع RegExpReplace دیگری همانطور که در این مثال نشان داده شده است استفاده کنید: نحوه حذف خطوط خالی با استفاده از regex.
برای اطلاعات بیشتر، لطفاً به:
- <مراجعه کنید. 24>نحوه جایگزینی رشته ها در اکسل با استفاده از regex
- نحوه حذف رشته ها با استفاده از regex
- چگونه فضای خالی را با استفاده از regex حذف کنیم
ابزارهای Regex برای مطابقت، استخراج ، جایگزین و حذف رشته های فرعی
کاربران Ultimate Suite ما می توانند تمام قدرت عبارات منظم را بدون درج یک خط کد در کتاب های کاری خود دریافت کنند. همه کدهای لازم توسط توسعه دهندگان ما نوشته شده و در حین نصب به صورت هموار در اکسل شما یکپارچه می شوند.
برخلاف توابع VBA که در بالا مورد بحث قرار گرفت، توابع Ultimate Suite مبتنی بر دات نت هستند که دو مزیت اصلی دارد:
- شما میتوانید از عبارات منظم در کتابهای کار معمولی xlsx. بدون افزودن کد VBA و ذخیره آنها به عنوان فایلهای دارای قابلیت ماکرو استفاده کنید.
- . موتور Regex NET از کلاسیک با امکانات کامل پشتیبانی میکند.عبارات منظم، که به شما امکان می دهد الگوهای پیچیده تری بسازید.
نحوه استفاده از Regex در اکسل
با نصب Ultimate Suite، استفاده از عبارات منظم در اکسل به سادگی این دو مرحله است. :
- در برگه Ablebits Data ، در گروه Text ، روی Regex Tools کلیک کنید.
- در صفحه Regex Tools ، موارد زیر را انجام دهید:
- داده منبع را انتخاب کنید.
- الگوی regex خود را وارد کنید.
- گزینه مورد نظر را انتخاب کنید: Match ، Extract ، Remove یا Replace .
- برای دریافت نتیجه به عنوان فرمول و نه مقدار، کادر انتخاب Insert as a formula را انتخاب کنید.
- دکمه اقدام را بزنید.
به عنوان مثال، برای حذف شماره کارت اعتباری از سلول ها A2:A6، ما این تنظیمات را پیکربندی می کنیم:
در یک سه مرحله، یک تابع AblebitsRegex در یک ستون جدید در سمت راست صفحه اصلی شما درج می شود. داده ها. در مورد ما، فرمول این است:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4}\b")
وقتی فرمول وجود دارد، میتوانید آن را مانند هر فرمول اصلی ویرایش، کپی یا جابجا کنید.
نحوه درج فرمول Regex به طور مستقیم در یک سلول
توابع AblebitsRegex نیز می توانند مستقیماً در یک سلول بدون استفاده از رابط افزونه درج شوند. به این صورت است:
- روی دکمه fx در نوار فرمول یا Insert Function در برگه Formulas کلیک کنید.
- در کادر گفتگوی Insert Function ، AblebitsUDFs را انتخاب کنیددسته بندی، تابع مورد نظر را انتخاب کنید و روی OK کلیک کنید.
- آگومان های تابع را مانند حالت عادی تعریف کنید و روی OK کلیک کنید. انجام شد!
برای اطلاعات بیشتر، لطفاً Regex Tools را برای اکسل ببینید.
این نحوه استفاده از عبارات منظم برای مطابقت، استخراج، جایگزینی و حذف متن در سلول های اکسل است. من از شما سپاسگزارم که خواندید و مشتاقانه منتظر دیدار شما در وبلاگ ما در هفته آینده هستم!
دانلودهای موجود
Excel Regex - نمونه های فرمول (فایل xlsm.)
Ultimate Suite - نسخه آزمایشی (فایل exe.)
یا مبتنی بر دات نت) یا ابزارهای شخص ثالثی را نصب کنید که از regex ها پشتیبانی می کنند.برگ تقلب Excel Regex
چه یک الگوی regex بسیار ساده یا بسیار پیچیده باشد، با استفاده از نحو رایج ساخته شده است. هدف این آموزش آموزش عبارات منظم به شما نیست. برای این کار، منابع زیادی به صورت آنلاین وجود دارد، از آموزش های رایگان برای مبتدیان تا دوره های برتر برای کاربران پیشرفته.
در زیر ما یک مرجع سریع به الگوهای اصلی RegEx ارائه می دهیم که به شما کمک می کند تا اصول اولیه را درک کنید. همچنین ممکن است هنگام مطالعه نمونه های بیشتر به عنوان برگه تقلب شما عمل کند.
اگر با عبارات منظم راحت هستید، می توانید مستقیماً به توابع RegExp بروید.
شخصیت ها
اینها بیشترین استفاده از الگوها برای مطابقت با کاراکترهای خاص هستند.
الگو | توضیح | مثال | تطابق | ||||||||||||||||||||
. | کاراکتر عام: با هر نویسه به جز شکست خط مطابقت دارد | .ot | نقطه ، hot ، pot ، @ot | ||||||||||||||||||||
\d | نویسه رقمی: هر رقمی تک رقمی از 0 تا 9 | \d | در a1b ، 1 | ||||||||||||||||||||
\D<مطابقت دارد 15> | هر کاراکتری که رقمی نیست | \D | در a1b ، با a و b<2 مطابقت دارد> | ||||||||||||||||||||
\s | کاراکتر فضای خالی: فاصله، برگه، خط جدید و بازگشت بار | .\s. | در 3 سنت ، مطابق با 3 c | ||||||||||||||||||||
\S | هرنویسه بدون فاصله | \S+ | در 30 سنت ، 30 و سنت | ||||||||||||||||||||
\w | کاراکتر کلمه: هر حرف، رقم یا زیرخط ASCII | \w+ | در 5_cats*** ، مطابق با 5_cats | ||||||||||||||||||||
\W | هر نویسهای که یک نویسه الفبایی یا زیرخط نیست | \W+ | در 5_cats*** ، *** | ||||||||||||||||||||
\t | Tab | <14 مطابقت دارد>||||||||||||||||||||||
\n | خط جدید | \n\d+ | در دو خط رشته زیر، با 10 5 گربه مطابقت دارد 10 سگ | ||||||||||||||||||||
\ | از معنای خاص یک شخصیت فرار می کند، بنابراین می توانید آن را جستجو کنید | \. \w+\. | از نقطه فرار می کند تا بتوانید "" را به معنای واقعی کلمه پیدا کنید. کاراکتر در یک رشته آقا ، خانم ، پروف. >15>16>19>20>کلاس های شخصیتبا استفاده از این الگوها، می توانید عناصر مجموعه کاراکترهای مختلف را مطابقت دهید.
کمیت سازهاکمیت سازها عبارات خاصی هستند که تعداد کاراکترهایی را که باید مطابقت داشته باشند را مشخص می کنند. یک کمیت همیشه برای کاراکتر قبل از آن اعمال می شود.
| ||||||||||||||||||||
+ | یک یا چند مورد | po+ | در pot ، مطابقت دارد po در فقیر ، مطابقت دارد poo | ||||||||||||||||||||
؟ | صفر یا یک اتفاق | roa?d | جاده، میله | ||||||||||||||||||||
*؟ | صفر یا بیشتر، اما تا حد امکان کمتر | 1a*؟ | در 1a ، 1aa و 1aaa ، مطابقت دارد 1a | ||||||||||||||||||||
+؟ | یک یا چند مورد، اما تا حد امکان کمتر | po+? | در pot و poor ، po | ||||||||||||||||||||
?? | صفر یا یک مورد مطابقت دارد ، اما تا حد امکان کمتر | roa?? | در road و rod ، ro | <مطابقت دارد 16>||||||||||||||||||||
{n} | با الگوی قبلی n بار مطابقت دارد | \d{3} | دقیقا 3 رقمی | ||||||||||||||||||||
{n ,} | با الگوی قبلی n بار یا بیشتر مطابقت دارد | \d{3,} | 3 یا بیشتر رقم | ||||||||||||||||||||
{n,m} | منطبق باالگوی قبلی بین n و m بار | \d{3،5 | از 3 تا 5 رقم |
گروه بندی
ساختارهای گروهبندی برای گرفتن یک زیررشته از رشته منبع استفاده میشوند، بنابراین میتوانید عملیاتی را با آن انجام دهید.
Syntax | Description | مثال | مطابقات |
(الگو) | گروه گرفتن: یک زیررشته منطبق را می گیرد و یک عدد ترتیبی به آن اختصاص می دهد | (\d+) | در 5 گربه و 10 سگ ، 5 (گروه 1) و 10 (گروه 2) |
(?:pattern) | گروه غیر اسیر: با یک گروه مطابقت دارد اما آن را نمی گیرد | (\d+)(?: سگ) | در 5 گربه و 10 سگ ، 10 |
\1 | محتوای گروه عکس می گیرد 1 | (\d+)\+(\d+)=\2\+\1 | 5+10=10+5 مطابقت دارد و 5 را می گیرد و 10 که در گروه گرفتن هستند |
\2 | محتوای گروه 2 |
Anchors
Anchors موقعیتی را در رشته ورودی مشخص می کنند که در آن جستجو شود یک مسابقه.
لنگر | توضیح | مثال | مطابقات |
^ | شروع رشته توجه: [^داخل پرانتز] به معنای "نه" است | ^\d+ | هر تعداد ارقام در شروع رشته. در 5 گربه و 10 سگ ، مطابقت دارد 5 | انتهای رشته | \d+$ | هر تعداد رقم در انتهای رشته. در 10Y |
(?<=) | نگاه مثبت به پشت | (?<=Y)X | منطبق با عبارت X وقتی که قبل از آن Y باشد (یعنی اگر Y پشت X وجود داشته باشد) |
(? | نگاه منفی در پشت | (? | عبارت X را زمانی که Y قبل از آن نیست مطابقت می دهد |
اکنون که موارد ضروری را می دانید، بیایید به جالب ترین قسمت برویم - استفاده از regexes بر روی داده های واقعی برای تجزیه رشته ها و یافتن اطلاعات مورد نیاز. اگر به جزئیات بیشتری در مورد نحو نیاز دارید، راهنمای مایکروسافت در مورد زبان بیان منظم ممکن است مفید باشد.
توابع RegEx سفارشی برای Excel
همانطور که قبلا ذکر شد، مایکروسافت اکسل توابع RegEx داخلی ندارد. برای فعال کردن عبارات منظم، ما سه تابع سفارشی VBA (با نام مستعار توابع تعریف شده توسط کاربر) ایجاد کردهایم. میتوانید کدها را از صفحات پیوند زیر یا از نمونه ما کپی کنید. کتاب کار، و سپس در فایلهای اکسل خود جایگذاری کنید.
نحوه عملکرد توابع VBA RegExp
این بخش مکانیک داخلی را توضیح میدهد و ممکن است غیرممکن باشد. برای کسانی که میخواهند بدانند دقیقاً چه اتفاقی در backend میافتد.
برای شروع استفاده از عبارات منظم در VBA، باید کتابخانه مرجع شی RegEx را فعال کنید یا از تابع CreateObject استفاده کنید. برای اینکه از مشکل تنظیم مرجع در ویرایشگر VBA جلوگیری کنیم، روش دوم را انتخاب کردیم.
شی RegExp دارای 4 ویژگی است:
- Pattern - هست الگوی برای مطابقت در رشته ورودی.
- Global - کنترل می کند که آیا همه موارد منطبق در رشته ورودی پیدا شوند یا فقط اولین مورد. در توابع ما، برای دریافت همه موارد مطابقت روی True تنظیم شده است.
- چندخطی - تعیین می کند که آیا الگوی بین خطوط شکسته در رشته های چند خطی مطابقت داشته باشد یا فقط در خط اول در کدهای ما، برای جستجوی در هر خط روی True تنظیم شده است.
- IgnoreCase - تعیین می کند که آیا یک عبارت منظم به حروف بزرگ و کوچک (پیش فرض) حساس است یا بزرگ و کوچک. غیر حساس (تنظیم به True). در مورد ما، این بستگی به نحوه پیکربندی پارامتر اختیاری match_case دارد. به طور پیشفرض، همه توابع حساس به حروف کوچک و کوچک هستند .
محدودیتهای VBA RegExp
Excel VBA الگوهای regex ضروری را پیادهسازی میکند، اما فاقد بسیاری از ویژگیهای پیشرفته است. موجود در دات نت، پرل، جاوا و سایر موتورهای regex. به عنوان مثال، VBA RegExp از اصلاحکنندههای درون خطی مانند (?i) برای تطبیق حساس به حروف بزرگ یا (?m) برای حالت چند خطی، lookbehinds، کلاسهای POSIX پشتیبانی نمیکند.
Excel Regex تابع تطبیق
تابع RegExpMatch یک رشته ورودی را برای متنی که با یک عبارت منظم مطابقت دارد جستجو میکند و اگر مطابقت یافت شد، TRUE، در غیر این صورت FALSE را برمیگرداند.
RegExpMatch(متن، الگو، [ match_case])Where:
- Text (الزامی) - یک یا چند رشته برای جستجو.
- Pattern ( مورد نیاز) - منظمعبارت برای مطابقت.
- Match_case (اختیاری) - نوع مطابقت. TRUE یا حذف شده - حساس به حروف کوچک و بزرگ؛ FALSE - حساس به حروف کوچک و بزرگ
کد تابع اینجا است.
مثال: نحوه استفاده از عبارات منظم برای مطابقت با رشته ها
در مجموعه داده زیر، فرض کنید می خواهید برای شناسایی ورودیهای حاوی کدهای SKU.
با توجه به اینکه هر SKU با 2 حرف بزرگ شروع میشود، پس از آن یک خط فاصله و با 4 رقم، میتوانید آنها را با استفاده از عبارت زیر مطابقت دهید.
الگوی : \b[A-Z]{2}-\d{4}\b
که در آن [A-Z]{2} به معنای هر 2 حرف بزرگ از A تا Z و \d{4 است. } به معنای هر 4 رقم از 0 تا 9 است. مرز کلمه \b نشان می دهد که یک SKU یک کلمه مجزا است و بخشی از یک رشته بزرگتر نیست.
با ایجاد الگو، شروع به تایپ فرمولی کنید که معمولاً انجام می دهید. و نام تابع در لیست پیشنهاد شده توسط تکمیل خودکار اکسل ظاهر می شود:
با فرض اینکه رشته اصلی در A5 باشد، فرمول به شرح زیر است:
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
برای راحتی، می توانید عبارت منظم را در یک سلول جداگانه وارد کنید و از یک مرجع مطلق ($A$2) برای آرگومن pattern استفاده کنید. تی این تضمین میکند که وقتی فرمول را در سلولهای دیگر کپی میکنید، آدرس سلول بدون تغییر باقی میماند:
=RegExpMatch(A5, $A$2)
برای نمایش برچسبهای متنی خود بهجای TRUE و FALSE، RegExpMatch را در تابع IF قرار دهید و متن های مورد نظر را در value_if_true و value_if_false مشخص کنیدبه علاوه 5 15 را می دهد ، مطابق با 15
ساخت جایگزین (OR)
عملوند متناوب منطق OR را فعال می کند، بنابراین می توانید این یا آن عنصر را مطابقت دهید.
Construct | توضیح | مثال | مطابقات |