Python 3-д зориулсан Re модулийн баримт бичиг. Тогтмол илэрхийлэлд зориулсан Re модуль

Тогтмол илэрхийлэл нь бараг бүх програмчлалын хэлний маш алдартай бүрэлдэхүүн хэсэг юм. Тэд танд хэрэгтэй мэдээллээ хурдан олж авахад тусална. Ялангуяа текстийг боловсруулах шаардлагатай үед тэдгээрийг ашигладаг. Python нь анхдагчаар тусгай модультай ирдэг. re, тогтмол илэрхийлэлтэй ажиллах үүрэгтэй.

Өнөөдөр бид энэ нь ерөнхийдөө юу болох, тэдэнтэй хэрхэн ажиллах, модулийн талаар дэлгэрэнгүй ярих болно re туслана.

Тогтмол илэрхийлэл: танилцуулга

Ердийн хэллэгийг ямар зорилгоор ашигладаг вэ? Бараг бүх. Жишээлбэл, эдгээр:

  1. Текст баталгаажуулалт шаарддаг вэб програмууд. Ердийн жишээ бол онлайн шуудангийн үйлчлүүлэгчид юм.
  2. Текст, мэдээллийн сан гэх мэттэй холбоотой бусад төслүүд.

Синтаксийг задлан шинжилж эхлэхээсээ өмнө номын сангийн үйл ажиллагааны үндсэн зарчмуудыг илүү нарийвчлан ойлгох хэрэгтэй. re ерөнхийдөө юу нь сайн байна. Мөн бид бодит практикээс жишээ авч, тэдгээрийг ашиглах механизмыг тайлбарлах болно. Та тексттэй олон төрлийн үйлдлийг гүйцэтгэхэд тохиромжтой ийм загварыг үүсгэж болно.

Re номын сан дахь загвар гэж юу вэ?

Үүний тусламжтайгаар та бусад функцийг илүү дасан зохицохын тулд янз бүрийн төрлийн мэдээллийг хайж, тэдгээрт тохирох мэдээллийг авах боломжтой. Мэдээжийн хэрэг, энэ өгөгдлийг боловсруулах.

Жишээлбэл, дараах загварыг авна уу. s+. Энэ нь ямар ч орон зайн тэмдэгт гэсэн үг юм. Хэрэв та үүн дээр нэмэх тэмдэг нэмбэл энэ нь загварт нэгээс олон зай орсон гэсэн үг юм. Энэ нь дуудагдсан таб тэмдэгтүүдтэй таарч болно t+.

Тэдгээрийг ашиглахын өмнө та номын санг импортлох хэрэгтэй Re. Үүний дараа бид тусгай команд ашиглан загварыг эмхэтгэдэг. Үүнийг хоёр үе шаттайгаар хийдэг.

>>> дахин импортлох

>>> regex = re.compile('s+')

Тодруулбал, энэ код нь ашиглаж болох загварыг эмхэтгэх үйлдлийг гүйцэтгэдэг. жишээлбэл, зай хайх (нэг буюу түүнээс дээш).

Тогтмол илэрхийлэл ашиглан өөр өөр мөрүүдээс тусдаа мэдээлэл авах

Бидэнд дараах мэдээллийг агуулсан хувьсагч байна гэж бодъё.

>>> текст = “””100 INF Мэдээлэл зүй

213 МАТ Математик  

156 ENG Англи хэл»»»

Үүнд гурван сургалт багтсан болно. Тус бүр нь дугаар, код, нэр гэсэн гурван хэсгээс бүрдэнэ. Эдгээр үгсийн хоорондын зай өөр байгааг бид харж байна. Энэ мөрийг тусдаа тоо, үг болгон хуваахын тулд юу хийх вэ? Энэ зорилгод хүрэх хоёр арга бий:

  1. функцийг дуудах дахин хуваах.
  2. функцийг ашиглах хуваах нь регекс.

Манай хувьсагчийн арга тус бүрийн синтаксийг ашиглах жишээ энд байна.

>>> re.split('s+', текст)  

# эсвэл

>>> regex.split(текст)

Гаралт: ['100', 'INF', 'Компьютерийн шинжлэх ухаан', '213', 'MAT', 'Математик', '156', 'ENG', 'Англи хэл']

Ерөнхийдөө хоёр аргыг хоёуланг нь ашиглаж болно. Гэхдээ энэ функцийг олон удаа ашиглахын оронд ердийн илэрхийлэл ашиглах нь үнэндээ хамаагүй хялбар юм. дахин хуваах.

Гурван функцтэй тохирохыг олох

Мөрөөс зөвхөн тоо гаргаж авах хэрэгтэй гэж бодъё. Үүний тулд юу хийх шаардлагатай вэ?

re.findall()

Энд функцийг ашиглах тохиолдол байна олох(), энэ нь ердийн илэрхийлэлтэй хамт текстийн хувьсагчаас нэг буюу хэд хэдэн тооны тохиолдлыг гаргаж авах боломжийг олгодог.

>>> хэвлэх (текст)  

100 INF мэдээлэл зүй

213 МАТ Математик  

156 ENG Англи хэл

>>> regex_num = дахин.compile('d+')  

>>> regex_num.findall(текст)  

['100', '213', '156']

d тэмдэгтэй хамт бид хувьсагч эсвэл текстэд байрлах ямар ч тоон утгыг харуулсан загварыг ашигласан. Бид тэнд нэг + нэмсэн тул дор хаяж нэг тоо байх ёстой гэсэн үг юм. 

Мөн та * тэмдгийг ашиглан тохирохыг олохын тулд цифр байх шаардлагагүй гэдгийг зааж өгч болно.

Харин манайд + ашигласан болохоор хамт олборлосон олох() Текстээс курсуудын 1 ба түүнээс дээш тоон тэмдэглэгээ. Тиймээс манай тохиолдолд тогтмол илэрхийллүүд нь функцийн тохиргооны үүрэг гүйцэтгэдэг.

re.search() vs re.match()

Функцуудын нэрнээс та таамаглаж байгаагаар эхнийх нь текстээс тохирохыг хайдаг. Асуулт: Энэ хоёрын ялгаа юу вэ олох уу? Гол нь өмнөх функц шиг олдсон үр дүнгийн бүх дарааллыг жагсаалт хэлбэрээр биш харин загварт тохирсон тодорхой объектыг буцаадаг явдал юм.

Хариуд нь re.match функц нь мөн адил үйлчилдэг. Зөвхөн синтакс нь өөр. Загварыг эхэнд нь байрлуулах ёстой. 

Үүнийг харуулсан жишээг авч үзье.

>>> # тексттэй хувьсагч үүсгэнэ

>>> text2 = «»»INF Мэдээлэл зүй

213 МАТ Математик 156″»»  

>>> # regex-ийг эмхэтгэж, хэв маягийг хайх

>>> regex_num = дахин.compile('d+')  

>>> s = regex_num.search(текст2)  

>>> print('Эхний индекс: ', s.start())  

>>> print('Сүүлийн индекс: ', s.end())  

>>> хэвлэх(текст2[s.start():s.end()]) 

Эхний индекс: 17 

Сүүлийн индекс: 20

213

Хэрэв та ижил төстэй үр дүнг өөр аргаар авахыг хүсвэл функцийг ашиглаж болно бүлэг().

Текстийн хэсгийг Re номын сангаар сольж байна

Текстийг солихын тулд функцийг ашиглана уу re.sub(). Манай сургалтын жагсаалт бага зэрэг өөрчлөгдсөн гэж бодъё. Дижитал утга бүрийн дараа бид табтай байгааг бид харж байна. Бидний даалгавар бол энэ бүх дарааллыг нэг мөрөнд нэгтгэх явдал юм. Үүнийг хийхийн тулд бид s+ илэрхийллийг солих хэрэгтэй алгасах 

Анхны текст нь:

# тексттэй хувьсагч үүсгэх

>>> text = “””100 INF t Мэдээлэл зүй

213 MAT t Математик  

156 ENG t Англи хэл»»»  

>>> хэвлэх (текст)  

100 Мэдээлэл Компьютерийн шинжлэх ухаан

213 МАТ Математик  

156 ENG English

Хүссэн үйлдлийг гүйцэтгэхийн тулд бид дараах кодын мөрүүдийг ашигласан.

# нэг буюу хэд хэдэн зайг 1-ээр солино

>>> regex = re.compile('s+')  

>>> хэвлэх(regex.sub(' ', текст))  

Үүний үр дүнд бид нэг шугамтай болсон. 

101 COM Компьютер 205 МАТ Математик 189 ENG Англи хэл

Одоо өөр нэг асуудлыг авч үзье. Бидэнд зай тавих ажил тулгараагүй. Бүх хичээлийн нэр шинэ мөрөөс эхлэх нь бидний хувьд илүү чухал юм. Үүнийг хийхийн тулд үл хамаарах зүйлд шинэ мөр нэмэх өөр илэрхийллийг ашиглана. Энэ ямар илэрхийлэл вэ?

Номын сан Re сөрөг тохирох зэрэг функцийг дэмждэг. Энэ нь ташуу зураасны өмнө анхаарлын тэмдэг агуулсан байдгаараа шууд хэлснээс ялгаатай. Өөрөөр хэлбэл, хэрэв бид шинэ мөрийн тэмдэгтийг алгасах шаардлагатай бол n-ийн оронд !n гэж бичих хэрэгтэй.

Бид дараах кодыг авна.

# шинэ мөрөөс бусад бүх хоосон зайг арилгана  

>>> regex = re.compile('((?!n)s+)')  

>>> хэвлэх(regex.sub(' ', текст))  

100 INF мэдээлэл зүй

213 МАТ Математик  

156 ENG Англи хэл

Тогтмол илэрхийллийн бүлгүүд гэж юу вэ?

Тогтмол хэллэгүүдийн бүлгүүдийн тусламжтайгаар бид хүссэн объектуудыг нэг мөрөнд биш харин тусдаа элемент хэлбэрээр авах боломжтой. 

Бид курсын дугаар, код, нэрийг нэг мөрөнд биш, тусдаа элемент болгон авах хэрэгтэй гэж бодъё. Даалгаврыг дуусгахын тулд та маш олон тооны шаардлагагүй мөрүүдийг бичих хэрэгтэй болно. 

Үнэн хэрэгтээ даалгаврыг маш хялбарчилж болно. Та бүх оруулгуудын загварыг эмхэтгэж, хаалтнаас авах шаардлагатай өгөгдлийг зааж өгч болно.

Маш цөөн тооны мөр байх болно. 

# курсын текстийн загваруудын бүлгүүдийг үүсгэж, тэдгээрийг задлах

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(курсын_загвар, текст)  

[('100', 'INF', 'Компьютерийн шинжлэх ухаан'), ('213', 'MAT', 'Математик'), ('156', 'ENG', 'Англи')]

"Харамч" тохирох тухай ойлголт

Стандартын дагуу ердийн илэрхийлэл нь тохирох өгөгдлийг хамгийн их хэмжээгээр гаргаж авахаар програмчлагдсан байдаг. Мөн танд хамаагүй бага хэрэгтэй байсан ч гэсэн.

Бид шошгыг авах шаардлагатай жишээ HTML кодыг харцгаая.

>>> text = “Харамч энгийн илэрхийлэл тааруулах жишээ”  

>>> re.findall('', текст)  

['Харамч энгийн илэрхийлэл тааруулах жишээ']

Зөвхөн нэг таг задлахын оронд Python бүх мөрийг авсан. Тиймээс л шунахай гэж нэрлэдэг.

Зөвхөн шошгыг авахын тулд юу хийх вэ? Энэ тохиолдолд та залхуу тохирох аргыг ашиглах хэрэгтэй. Ийм илэрхийлэлийг тодорхойлохын тулд загварын төгсгөлд асуултын тэмдэг нэмнэ.

Та дараах код болон орчуулагчийн гаралтыг авах болно.

>>> re.findall('', текст)  

[”, ”]

Хэрэв энэ нь зөвхөн анхны тохиолдлыг олж авах шаардлагатай бол энэ аргыг хэрэглэнэ хайх ().

re.search('', text).group()  

"

Дараа нь зөвхөн нээлтийн шошго олдох болно.

Түгээмэл илэрхийллийн загварууд

Энд хамгийн түгээмэл хэрэглэгддэг тогтмол илэрхийллийн хэв маягийг агуулсан хүснэгт байна.

Python 3-д зориулсан Re модулийн баримт бичиг. Тогтмол илэрхийлэлд зориулсан Re модуль

Дүгнэлт

Бид ердийн илэрхийлэлтэй ажиллах хамгийн энгийн аргуудыг л авч үзсэн. Ямар ч байсан тэд ямар чухал болохыг та харсан. Энд бүхэл бүтэн текст эсвэл түүний бие даасан хэсгүүдийг задлан шинжлэх шаардлагатай эсэх, нийгмийн сүлжээн дэх нийтлэлд дүн шинжилгээ хийх эсвэл дараа нь боловсруулахын тулд өгөгдөл цуглуулах шаардлагатай эсэх нь хамаагүй. Тогтмол илэрхийлэл нь энэ асуудалд найдвартай туслагч юм.

Эдгээр нь танд дараахь ажлуудыг гүйцэтгэх боломжийг олгоно.

  1. Имэйл хаяг эсвэл утасны дугаар гэх мэт өгөгдлийн форматыг зааж өгөх.
  2. Мөр авч, хэд хэдэн жижиг мөр болгон хуваах.
  3. Хайх, шаардлагатай мэдээллийг задлах, тэмдэгтүүдийн хэсгийг солих гэх мэт тексттэй янз бүрийн үйлдлүүдийг гүйцэтгэнэ.

Тогтмол илэрхийллүүд нь мөн танд энгийн бус үйлдлүүдийг хийх боломжийг олгодог. Өнгөц харахад энэ шинжлэх ухааныг эзэмших нь тийм ч хялбар биш юм. Гэвч практик дээр бүх зүйл стандартчилагдсан байдаг тул үүнийг нэг удаа ойлгоход хангалттай бөгөөд үүний дараа энэ хэрэгслийг зөвхөн Python-д төдийгүй бусад програмчлалын хэл дээр ашиглаж болно. Excel хүртэл өгөгдөл боловсруулалтыг автоматжуулахын тулд ердийн илэрхийлэл ашигладаг. Тиймээс энэ хэрэгслийг ашиглахгүй байх нь нүгэл юм.

хариу үлдээх