استفاده از متا کارکتر ها و کلاس ها

  • مدرس: علی بیگدلی
  • تاریخ انتشار: 1402/05/04
  • تعداد بازدید: 143

 متا کارکتر نقطه یا .

متا نویسه نقطه (.) مخفف هر کاراکتر منفرد در متن است.

import re

words = ('seven', 'even', 'prevent', 'revenge', 'maven', 
    'eleven', 'amen', 'event')

pattern = re.compile(r'.even')

for word in words:
    if re.match(pattern, word):
        print(f'The {word} matches')

در مثال ، ما یک تاپل با هشت کلمه داریم. ما یک الگوی حاوی نقطه متاکارکتررا روی هر یک از کلمات اعمال می کنیم.

pattern = re.compile(r'.even')

نقطه مخفف هر کاراکتر واحد در متن است. شخصیت باید حضور داشته باشد.

The seven matches 
The revenge matches 

دو کلمه با الگوی مطابقت دارد: seven و revenge

استفاده از علامت ?

کاراکتر متا علامت سوال (؟) یک کمیت ساز است که با عنصر قبلی صفر یا یک بار مطابقت دارد.

import re

words = ('seven', 'even','prevent', 'revenge', 'maven', 
    'eleven', 'amen', 'event')

pattern = re.compile(r'.?even')

for word in words:

    if re.match(pattern, word):
        print(f'The {word} matches')

در مثال ، ما یک علامت سوال بعد از نقطه اضافه می کنیم. این بدان معنی است که در الگو می توانیم یک کارکتر دلخواه داشته باشیم یا نمی توانیم آنجا کاراکتری داشته باشیم.

The seven matches 
The even matches 
The revenge matches 
The event matches 

این بار ، علاوه بر Seven و revenge ، کلمات even و event نیز مطابقت دارند.

استفاده از علامت ^

لنگرها موقعیت های کاراکترها را در متن مشخصی مطابقت می دهند. هنگام استفاده از ^ ، مطابقت باید در ابتدای رشته و هنگام استفاده از $ ، مطابقت باید در انتهای رشته رخ دهد.

import re

sentences = ('I am looking for Jane.',
    'Jane was walking along the river.',
    'Kate and Jane are close friends.')

pattern = re.compile(r'^Jane')

for sentence in sentences:
    
    if re.search(pattern, sentence):
        print(sentence)

در مثال ، ما سه جمله داریم. الگوی جستجو ^ Jane است. این الگو بررسی می کند که رشته "Jane" در ابتدای متن قرار دارد یا خیر.

تطابق دقیق یا Exact

مطابقت دقیق را می توان با تابع fullmatch یا با قرار دادن اصطلاح بین آن انجام داد: ^ و $.

import re

words = ('book', 'bookworm', 'Bible', 
    'bookish','cookbook', 'bookstore', 'pocketbook')

pattern = re.compile(r'^book$')

for word in words:

    if re.search(pattern, word):
        print(f'The {word} matches')  

در مثال ، ما به دنبال یک مطابقت دقیق برای اصطلاح "book" هستیم.

کلاس های کارکتر

یک کلاس کاراکتر مجموعه ای از کاراکترها را تعریف می کند که هر یک از آنها می تواند در یک رشته ورودی برای موفقیت یک تطابق وجود داشته باشد.

import re

words = ('a gray bird', 'grey hair', 'great look')

pattern = re.compile(r'gr[ea]y')

for word in words:

    if re.search(pattern, word):
        print(f'{word} matches') 

در مثال ، ما از کلاس کاراکتر استفاده می کنیم تا کلمات gray و greyرا شامل شود.

pattern = re.compile(r'gr[ea]y')

کلاس [ea] اجازه می دهد تا از کارکتر های "e" یا "a" در الگو استفاده شود.

حساسیت به بزرگ یا کوچک بودن لغات

به طور پیش فرض ، مطابقت الگوها به حروف کوچک بزرگ حساس است. با عبور re.IGNORECASE به تابع کامپایل ، می توانیم آن را نسبت به حروف بزرگ حساس نکنیم.

import re

words = ('dog', 'Dog', 'DOG', 'Doggy')

pattern = re.compile(r'dog', re.IGNORECASE)

for word in words:
    if re.match(pattern, word):
        print(f'{word} matches')

در مثال ، ما الگوی مورد نظر را بدون در نظر گرفتن مورد به کار می بریم.

dog matches
Dog matches
DOG matches
Doggy matches

گزینه ها یا Alternations

اپراتور تناوب | یک عبارت منظم با چندین انتخاب ایجاد می کند.

import re

words = ("Jane", "Thomas", "Robert",
    "Lucy", "Beky", "John", "Peter", "Andy")

pattern = re.compile(r'Jane|Beky|Robert')

for word in words:
    
    if re.match(pattern, word):
        print(word)

ما هشت نام در این لیست داریم.

pattern = re.compile(r'Jane|Beky|Robert')

این عبارت منظم به دنبال رشته های "jane" ، "beky" یا "robert" است.

تابع یابنده یا finditer 

تابع finditer یک تکرار کننده را ارائه می دهد که اشیا match مطابقت را در تمام موارد غیر همپوشانی همسان برای الگوی موجود در یک رشته باز می گرداند.

import re

text = 'I saw a fox in the wood. The fox had red fur.'

pattern = re.compile(r'fox')

found = re.finditer(pattern, text)

for item in found:

    s = item.start()
    e = item.end()
    print(f'Found {text[s:e]} at {s}:{e}')

در مثال ، ما اصطلاح "fox" را در متن جستجو می کنیم. ما از مکرر موارد منطبق برمی آییم و آنها را با شاخص های آنها چاپ می کنیم.

s = item.start()
e = item.end()

توابع شروع و پایان به ترتیب شاخص شروع و پایان را برمی گردانند.

Found fox at 8:11
Found fox at 29:32