Ungkapan biasa dalam Python

WBOY
Lepaskan: 2023-08-27 10:05:21
asal
1194 orang telah melayarinya

Ungkapan biasa dalam Python

Pernahkah anda terfikir apakah kunci untuk mencari teks tertentu dalam dokumen atau memastikan teks itu sesuai format tertentu (seperti alamat e-mel) dan operasi lain yang serupa?

Kunci kepada jenis operasi ini ialah ungkapan biasa (regex). Mari kita lihat beberapa definisi ungkapan biasa. Dalam Wikipedia, ungkapan biasa ditakrifkan seperti berikut:

Jujukan aksara yang mentakrifkan corak carian, terutamanya digunakan untuk padanan corak atau padanan rentetan dengan rentetan, iaitu, operasi seperti "cari dan ganti". Konsep ini muncul pada tahun 1950-an, apabila ahli matematik Amerika Stephen Kleene memformalkan perihalan bahasa biasa dan menjadi biasa digunakan dengan utiliti pemprosesan teks Unix ed (editor) dan grep (penapis).

Satu lagi takrifan

regular-expressions.info ialah:

Ungkapan biasa (pendek kata regex atau regexp) ialah rentetan teks khas yang digunakan untuk menerangkan corak carian. Anda boleh menganggap ungkapan biasa sebagai kad bebas pada steroid. Anda mungkin biasa dengan tatatanda kad bebas, seperti *.txt, untuk mencari semua fail teks dalam pengurus fail anda. Setara regex ialah .*.txt$

Saya tahu konsep ungkapan biasa mungkin masih kedengaran agak kabur. Jadi, mari kita lihat beberapa contoh ungkapan biasa untuk memahami konsep ini dengan lebih baik.

Contoh Ungkapan Biasa

Dalam bahagian ini, saya akan menunjukkan kepada anda beberapa contoh ungkapan biasa untuk membantu anda memahami konsep ini dengan lebih lanjut.

Andaikan anda mempunyai ungkapan biasa ini:

/abder/
Salin selepas log masuk

Ini hanya memberitahu kami untuk memadankan hanya perkataan abder. abder

这个正则表达式怎么样?

/a[nr]t/
Salin selepas log masuk

您可以按如下方式阅读此正则表达式:找到一个文本模式,第一个字母是 a,最后一个字母是 t,这些字母之间是 n 或 r。所以匹配的词是 antart

现在让我给你一个小测验。如何编写以 ca 开头,并以以下一个或全部字符 tbr 结尾的正则表达式?是的,这个正则表达式可以写成如下:

/ca[tbr]/
Salin selepas log masuk

如果您看到以抑扬音符号 ^ 开头的正则表达式,则表示匹配以 ^ 之后提到的字符串开头的字符串。因此,如果您有下面的正则表达式,它会匹配以 This 开头的字符串。

/^This/
Salin selepas log masuk

因此,在以下字符串中:

My name is Abder
This is Abder
This is Tom
Salin selepas log masuk

基于正则表达式 /^This/,将匹配以下字符串:

This is Abder
This is Tom
Salin selepas log masuk

如果我们想要匹配以某个字符串结尾的字符串怎么办?在本例中,我们使用美元符号 $。这是一个例子:

Abder$
Salin selepas log masuk

因此,在上面的字符串(三行)中,将使用此正则表达式来匹配以下模式:

My name is Abder
This is Abder
Salin selepas log masuk

那么,您对这个正则表达式有何看法?

^[A-Z][a-z]
Salin selepas log masuk

我知道乍一看可能看起来很复杂,但让我们一点一点地看一下。

我们已经了解了什么是抑扬音 ^ 。这意味着匹配以某个字符串开头的字符串。 [A-Z] 指的是大写字母。因此,如果我们阅读正则表达式的这一部分: ^[A-Z],它告诉我们匹配以大写字母开头的字符串。最后一部分 [a-z] 表示找到以大写字母开头的字符串后,后面会跟着字母表中的小写字母。

那么,使用此正则表达式将匹配以下哪些字符串?如果您不确定,您可以使用 Python(我们将在下一节中看到)来测试您的答案。

abder
Abder
ABDER
ABder
Salin selepas log masuk

正则表达式是一个非常广泛的主题,这些示例只是为了让您了解它们是什么以及我们为什么使用它们。

RexEgg 是了解更多有关正则表达式并查看更多示例的一个很好的参考。

Python 中的正则表达式

现在让我们来看看有趣的部分。我们希望了解如何在 Python 中使用上述一些正则表达式。我们将用来在 Python 中处理正则表达式的模块是 re 模块。

第一个示例是关于查找单词 abder。在 Python 中,我们将按如下方式执行此操作:

import re
text = 'My name is Abder'
match_pattern = re.match(r'Abder', text)
print match_pattern
Salin selepas log masuk

如果运行上面的Python脚本,您将得到输出:None!

该脚本工作得很好,但问题在于函数 match() 的工作方式。如果我们返回 re 模块文档,这就是函数 match()

Bagaimana dengan ungkapan biasa ini? 🎜
import re
text = 'This is a black ant'
match_pattern = re.search(r'a[nr]t', text)
print match_pattern.group(0)
Salin selepas log masuk
Salin selepas log masuk
🎜Anda boleh membaca regex ini seperti berikut: Cari corak teks dengan huruf pertama ialah a dan huruf terakhir ialah t< /code>, antara huruf ini ialah <code class="inline">n atau r. Jadi perkataan yang sepadan ialah ant dan art. 🎜 🎜Sekarang biar saya berikan sedikit kuiz. Bagaimana untuk menulis ungkapan biasa yang bermula dengan ca dan berakhir dengan satu atau semua aksara berikut tbr? Ya, ungkapan biasa ini boleh ditulis seperti berikut: 🎜 rrreee 🎜Jika anda melihat ungkapan biasa bermula dengan simbol circumflex ^, ia bermakna sepadan dengan aksara yang disebut selepas ^ Rentetan di permulaan rentetan. Jadi jika anda mempunyai ungkapan biasa berikut, ia akan sepadan dengan rentetan bermula dengan This. 🎜 rrreee 🎜Oleh itu, dalam rentetan berikut: 🎜 rrreee 🎜Berdasarkan ungkapan biasa /^This/, rentetan berikut akan dipadankan: 🎜 rrreee 🎜Bagaimana jika kita ingin memadankan rentetan yang berakhir 🎜 dengan rentetan tertentu 🎜? Dalam contoh ini, kami menggunakan tanda dolar $. Berikut adalah contoh: 🎜 rrreee 🎜Jadi, dalam rentetan di atas (tiga baris), ungkapan biasa ini akan digunakan untuk memadankan corak berikut: 🎜 rrreee 🎜Jadi, apa pendapat anda tentang ungkapan biasa ini? 🎜 rrreee 🎜Saya tahu ia mungkin kelihatan rumit pada pandangan pertama, tetapi mari kita lihat sedikit demi sedikit. 🎜 🎜Kami telah mempelajari apa itu iambik ^ . Ini bermakna memadankan rentetan yang bermula dengan rentetan tertentu. [A-Z] merujuk kepada huruf besar. Jadi jika kita membaca bahagian regex ini: ^[A-Z], ia memberitahu kita untuk memadankan rentetan yang bermula dengan huruf besar. Bahagian terakhir [a-z] bermaksud apabila rentetan ditemui yang bermula dengan huruf besar, ia akan diikuti dengan huruf kecil abjad. 🎜 🎜Jadi, yang manakah antara rentetan berikut akan dipadankan menggunakan ungkapan biasa ini? Jika anda tidak pasti, anda boleh menggunakan Python (seperti yang akan kita lihat dalam bahagian seterusnya) untuk menguji jawapan anda. 🎜 rrreee 🎜Ungkapan biasa adalah topik yang sangat luas, contoh ini hanya untuk memberi anda gambaran tentang apa itu dan mengapa kami menggunakannya. 🎜 🎜RexEgg ialah rujukan yang bagus untuk mengetahui lebih lanjut tentang ungkapan biasa dan melihat lebih banyak contoh. 🎜 🎜Ungkapan Biasa dalam Python🎜 🎜Sekarang mari kita ke bahagian yang menyeronokkan. Kami ingin melihat cara menggunakan beberapa ungkapan biasa di atas dalam Python. Modul yang akan kami gunakan untuk mengendalikan ungkapan biasa dalam Python ialah modul re. 🎜 🎜Contoh pertama ialah tentang mencari perkataan abder. Dalam Python kita akan melakukan ini seperti berikut: 🎜 rrreee 🎜Jika anda menjalankan skrip Python di atas, anda akan mendapat output: None!🎜 🎜Skrip berfungsi dengan baik, tetapi masalahnya ialah cara fungsi match() berfungsi. Jika kita mengembalikan dokumen modul re, ini adalah fungsi match(): 🎜
如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的匹配对象。如果字符串与模式不匹配,则返回 None;请注意,这与零长度匹配不同。

啊哈,从这里我们可以看出,match() 仅当在字符串的开头找到匹配项时才会返回结果。

我们可以使用函数 search(),这是基于文档的:

扫描字符串,查找正则表达式模式产生匹配的第一个位置,并返回相应的匹配对象。如果字符串中没有位置与模式匹配,则返回 None;请注意,这与在字符串中的某个点查找零长度匹配不同。

因此,如果我们编写上面的脚本,但使用 search() 而不是 match(),我们会得到以下输出:

<_sre.SRE_Match 0x101cfc988 处的对象>

即返回了一个匹配对象

如果我们想返回结果(字符串匹配),我们使用 group() 函数。如果我们想查看整个比赛,我们使用 group(0)。因此:

打印 match_pattern.group(0)

将返回输出:Abder

如果我们采用上一节中的第二个正则表达式,即 /a[nr]t/,则可以用 Python 编写如下:

import re
text = 'This is a black ant'
match_pattern = re.search(r'a[nr]t', text)
print match_pattern.group(0)
Salin selepas log masuk
Salin selepas log masuk

此脚本的输出是:ant

结论

文章越来越长,Python 中的正则表达式主题即使不是一本书,也肯定需要不止一篇文章。

然而,本文旨在让您快速入门并有信心进入 Python 正则表达式的世界。您可以参考 re 文档来了解有关此模块的更多信息以及如何深入了解该主题。

Atas ialah kandungan terperinci Ungkapan biasa dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!