Search болон extract(задлан шинжлэх) хийхэд маш их тус болдог Python-ийн хүчирхэг module байдаг ба үүнийг Regular expressions гэж нэрлэдэг.
Илүү хүчирхэг regular expressions бүтээх боломжийг бидэнд олгодог өөр хэд хэдэн тусгай тэмдэгтүүд байдаг. Хамгийн түгээмэл хэрэглэгддэг тусгай тэмдэгт бол ямар ч тэмдэгттэй тохирох period буюу full stop юм.
Дараах жишээнд regular expressions F..m: нь "From:", "Fxxm:", "F12m:", эсвэл "F!@m:" тэмдэгтүүдийн альнд нь ч таарна.
F үсгээр эхэлж M-ээр төгссөн мөрүүдийг хайх хайлт:
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if re.search('^F..m:', line):
print(line)
Дараах жишээн дээр repeated wild card тэмдэгтийг судлъя.
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if re.search('^From:.+@', line):
print(line)
Жишээлбэл ийм хайлт хэвлэж харуулна:
From: stephen.marquard@uct.ac.za
From: louis@media.berkeley.edu
From: zqian@umich.edu
From: rjlowe@iupui.edu
^From:.+@^From:.+@-ийг тайлбарлавал:
Хэрэв бид Python дахь string-ээс өгөгдлийг задлахыг хүсвэл findall() аргыг ашиглан regular expression-тэй таарч байгаа бүх substring-ийг гаргаж авч болно.
Дараахь программ нь findall()-г ашиглан и-мэйл хаягтай мөрүүдийг олж, тэдгээр мөр бүрээс бүх и-мэйл хаягийг гаргаж авна.
import re
s = 'A message from csev@umich.edu to cwen@iupui.edu about meeting'
lst = re.findall('\S+@\S+', s)
print(lst)
үр дүн нь:
[
'csev@umich.edu',
'cwen@iupui.edu'
]
\S+@\S+-ийг тайлбарлавал:
Энгийнээр тайлбарлавал @ тэмдэгттэй ард урдаа хоосон зайгүй үгийг хайж байна гэсэн үг.
Файлын бүх мөрийг уншиж, имэйл хаяг шиг харагдах бүх зүйлийг дараах байдлаар хэвлэхийн тулд програмд доорх regular expression-г ашиглаж болно.
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
x = re.findall('\S+@\S+', line)
if len(x) > 0:
print(x)
Үр дүн нь:
['< source@collab.sakaiproject.org>;']
['< source@collab.sakaiproject.org>;']
['apache@localhost']
['source@collab.sakaiproject.org;']
['cwen@iupui.edu']
['source@collab.sakaiproject.org']
['cwen@iupui.edu']
['cwen@iupui.edu']
['wagnermr@iupui.edu']
Зарим имэйл хаягууд "<" эсвэл ";" гэх мэт илүү тэмдэгтүүд байна.
Зөв хайлтыг харуулахын тулд өөр нэг regular expression ашиглацгаая. Дөрвөлжин хаалт нь хайлтад оруулахыг хүсч буй тэмдэгтүүдийг зааж өгөхөд ашиглагддаг.
Шинэ regular expression-ууд:
[a-zA-Z0-9]\S*@\S*[a-zA-Z]
Тайлбарлавал:
Хэрэв бид энэ илэрхийлэлийг програмдаа ашиглавал бидний өгөгдөл илүү цэвэр болно:
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
x = re.findall('[a-zA-Z0-9]\S*@\S*[a-zA-Z]', line)
if len(x) > 0:
print(x)
Үр дүн нь:
['wagnermr@iupui.edu']
['cwen@iupui.edu']
['postmaster@collab.sakaiproject.org']
['200801032122.m03LMFo4005148@nakamura.uits.iupui.edu']
['source@collab.sakaiproject.org']
['source@collab.sakaiproject.org']
['source@collab.sakaiproject.org']
['apache@localhost']
Хэрэв бид "X-" тэмдэгт мөрөөр эхэлсэн мөрүүдээс тоонуудыг олохыг хүсвэл жишээлбэл:
X-DSPAM-Confidence: 0.8475
X-DSPAM-Probability: 0.0000
Шинэ regular expression-ууд:
^X-.*: [0-9.]+
Тайлбарлавал:
Хэрэв бид энэ илэрхийлэлийг програмдаа ашиглавал:
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
if re.search('^X\S*: [0-9.]+', line):
print(line)
Үр дүн нь:
X-DSPAM-Confidence: 0.8475
X-DSPAM-Probability: 0.0000
X-DSPAM-Confidence: 0.6178
X-DSPAM-Probability: 0.0000
Regular expression-ий өөр нэг тусгай тэмдэгт нь хаалт () юм. findall()-ийг хэрэглэж байхад хаалтыг хэрэглэвэл хаалт дотрохыг зөвхөн харуулна гэсэн үг.
Хэрэв энэ илэрхийлэлийг програмдаа ашиглавал:
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
x = re.findall('^X\S*: ([0-9.]+)', line)
if len(x) > 0:
print(x)
Үр дүн нь:
['0.8475']
['0.0000']
['0.6178']
['0.0000']
['0.6961']
['0.0000']
Хэрэв бид дээрхтэй ижил техниĸийг ашиглан бүх revision numbers гаргаж авахыг хүсвэл дараах программыг бичиж болно.
import re
hand = open('mbox-short.txt')
for line in hand:
line = line.rstrip()
x = re.findall('^Details:.*rev=([0-9]+)', line)
if len(x) > 0:
print(x)
Тайлбарлавал:
Үр дүн нь:
['39772']
['39771']
['39770']
['39769']
Бид regular expression-д тусгай тэмдэгтүүдийг мөрийн эхлэл, төгсгөлд тааруулах эсвэл wild card- уудыг зааж өгөхийн тулд ашигладаг. Гэвч тэдгээр тэмдэгтүүдийг(жишээлбэл $, ^ гэх мэт) хайхыг хүсвэл \ урвуу зураасаар хайж болно.
Жишээ нь:
import re
x = 'We just received $10.00 for cookies.'
y = re.findall('\$[0-9.]+',x)
Үр дүн нь:
['$10.00']