عبارات منظم (Regex)، زبانی برای تعریف الگوهای متنی است. با استفاده از این الگوها، میتوانیم متنها را جستجو و پردازش کنیم. در زمینه NLP، Regex میتواند برای شناسایی الگوهای خاصی مثل آدرسهای ایمیل، شمارههای تلفن یا کلمات خاص در متن استفاده شود.
برای استفاده از Regex، با چند نماد و مفهوم اصلی آشنا میشویم:
a
به معنای حرف "a" است.به عبارت دیگر، وقتی شما حرف یا عددی را وارد میکنید، Regex بهطور مستقیم به دنبال آن میگردد.مثال :
a
این الگو فقط به دنبال حرف "a" میگردد. اگر این الگو را در متن "apple" اجرا کنید، حرف "a" را شناسایی میکند.
5
این الگو فقط به دنبال عدد "5" میگردد. اگر این الگو را در جمله "I have 5 apples" اجرا کنید، عدد "5" را شناسایی میکند.
متغیرهای خاص:
.
: هر کاراکتر غیر از خط جدید (newline)
d\: هر رقم (معادل [0-9]
)w\
: هر حرف یا عدد (معادل [a-zA-Z0-9_]
)s\
: هر فضای خالی (مثل فضا، تب یا خط جدید)
.
این الگو به دنبال هر کاراکتر غیر از خط جدید (newline) میگردد. بهعنوان مثال، اگر این الگو را در متن "hello" اجرا کنید، تمام کاراکترها یعنی "h"، "e"، "l"، "l" و "o" را شناسایی میکند.
\d
این الگو به دنبال هر عدد (رقم) میگردد. بهعنوان مثال، اگر این الگو را در جمله "I have 2 apples and 3 oranges" اجرا کنید، اعداد "2" و "3" را شناسایی میکند و به ما میگوید که در متن اعداد وجود دارد.
\w
این الگو به دنبال هر حرف (حروف الفبا و اعداد) و همچنین کاراکتر زیرخط () میگردد. اگر این الگو را در جمله "user_name123" اجرا کنید، تمام حروف "u"، "s"، "e"، "r"، ""، "n"، "a"، "m"، "e"، "1"، "2" و "3" را شناسایی میکند.
\s
این الگو به دنبال هر فضای خالی (مانند فضا، تب یا خط جدید) میگردد. بهعنوان مثال، اگر این الگو را در جمله "Hello World" اجرا کنید، فضای بین "Hello" و "World" را شناسایی میکند.
*
: نشاندهنده صفر یا بیشتر تکرار از الگوی قبلی+
: نشاندهنده یک یا بیشتر تکرار از الگوی قبلی?
: نشاندهنده صفر یا یک تکرار از الگوی قبلی{n}
: نشاندهنده دقیقاً n بار تکرار از الگوی قبلیa*
این الگو به دنبال صفر یا بیشتر تکرار از حرف "a" میگردد. اگر این الگو را در متن "aaab" اجرا کنید، تمام حروف "a" را شناسایی میکند.
همچنین در متن "b" هیچ تطابقی نخواهد داشت زیرا "a" صفر بار تکرار شده است.
*a
این الگو به دنبال صفر یا بیشتر تکرار از هر کاراکتری بهعلاوه یک "a" در انتهای آن میگردد. برای مثال:
در "ba"، این الگو "a" را شناسایی میکند. "bba"، این الگو "a" را شناسایی میکند. در متن "b"، این الگو هیچ تطابقی ندارد زیرا "a" وجود ندارد.
b+
این الگو به دنبال یک یا بیشتر تکرار از حرف "b" میگردد. اگر این الگو را در متن "bbbc" اجرا کنید، تمام حروف "b" را شناسایی میکند. در متن "c" هیچ تطابقی نخواهد داشت زیرا "b" وجود ندارد.
c?
این الگو به دنبال صفر یا یک تکرار از حرف "c" میگردد. اگر این الگو را در متن "cat" اجرا کنید، حرف "c" را شناسایی میکند.
d{2}
این الگو به دنبال دقیقاً دو تکرار از حرف "d" میگردد. اگر این الگو را در متن "add" اجرا کنید، فقط "dd" را شناسایی میکند. در متن "d" یا "ddd" تطابق نخواهد داشت زیرا تعداد تکرارها دقیقاً دو نیست.
^
: نشاندهنده شروع یک خط$
: نشاندهنده پایان یک خط
^hello
این الگو به دنبال کلمه "hello" در آغاز یک خط میگردد. وقتی ^
در ابتدای یک الگو قرار میگیرد (مثل ^Hello
)، به معنای "شروع رشته" است. این نشان میدهد که الگو باید در ابتدا یا ابتدای یک خط قرار گیرد
به عنوان مثال:
در متن "hello world"، این الگو تطابق دارد زیرا "hello" در ابتدای متن قرار دارد.
در متن "say hello", این الگو هیچ تطابقی نخواهد داشت زیرا "hello" در ابتدای خط نیست.
[^\s]
به این معنی است که هر کاراکتری که فضای خالی (space) نباشد، شناسایی میشود. یعنی به معنای "غیر" یا "عدم" است.
world$
این الگو به دنبال کلمه "world" در پایان یک خط میگردد. به عنوان مثال:
در متن "hello world"، این الگو تطابق دارد زیرا "world" در انتهای متن قرار دارد.
در متن "world is big"، این الگو هیچ تطابقی نخواهد داشت زیرا "world" در پایان خط نیست.
(...)
: برای گروهبندی الگوها|
: برای انتخاب بین چند گزینه (مثل "یا")[]
: مجموعهای از کاراکترها
(abc)
این الگو به دنبال دقیقاً کاراکترهای "abc" میگردد. به عنوان مثال:
در متن "abc def"، این الگو تطابق دارد زیرا "abc" وجود دارد. در متن "ab def"، این الگو هیچ تطابقی نخواهد داشت زیرا "abc" بهطور کامل وجود ندارد.
(abc)+
این الگو به دنبال یک یا بیشتر تکرار از "abc" میگردد. در مثال های زیر:
در متن "abcabc"، این الگو تطابق دارد و "abc" را دو بار شناسایی میکند. اما در متن "def"، هیچ تطابقی نخواهد داشت زیرا "abc" وجود ندارد.
cat|dog
این الگو به دنبال یکی از دو گزینه "cat" یا "dog" میگردد.
در متن "I have a cat"، این الگو تطابق دارد و "cat" را شناسایی میکند. در متن "I have a dog"، این الگو تطابق دارد و "dog" را شناسایی میکند.
[a-z]
این الگو به دنبال هر حرف کوچک از الفبای انگلیسی میگردد.
[A-Z]
این الگو به دنبال هر حرف بزرگ از الفبای انگلیسی میگردد.
[0-9]
این الگو به دنبال هر عدد (0 تا 9) میگردد.
[a-zA-Z0-9]
این الگو به دنبال هر حرف بزرگ یا کوچک و هر عدد میگردد.
متن "abc123": تطابق دارد و حروف "a"، "b"، "c"، و اعداد "1"، "2"، "3" را شناسایی میکند.
متن "!@#": هیچ تطابقی نخواهد داشت.
[aeiou][0-9]
این الگو به دنبال یک حرف صدادار (a، e، i، o، u) و پس از آن یک عدد (0 تا 9) میگردد.
در متن "a1" :"a1" را شناسایی میکند.
[a-zA-Z0-9_!@#]+
این الگو به دنبال یک یا بیشتر از کاراکترهای مجاز میگردد که شامل حروف بزرگ و کوچک، اعداد، زیرخط (_) و نمادهای خاص مانند !
، @
و #
است.
متن "user_name123!" تطابق دارد و کل عبارت "user_name123!" را شناسایی میکند.
متن "hello@world" تطابق دارد و کل عبارت "hello@world" را شناسایی میکند.
متن "user-name" تطابق ندارد زیرا کاراکتر '-' مجاز نیست.