Ungkapan biasa, juga dikenali sebagai ungkapan biasa, (Bahasa Inggeris: Regular Expression, sering disingkat sebagai regex, regexp atau RE dalam kod), ia adalah konsep dalam sains komputer. Ungkapan biasa sering digunakan untuk mendapatkan dan menggantikan teks yang sepadan dengan corak tertentu. Banyak bahasa pengaturcaraan menyokong manipulasi rentetan menggunakan ungkapan biasa. Contohnya, Perl mempunyai enjin ekspresi biasa yang berkuasa terbina di dalamnya. Konsep ungkapan biasa pada asalnya dipopularkan oleh perisian alat dalam Unix. Ungkapan biasa ialah formula logik yang beroperasi pada rentetan (termasuk aksara biasa (contohnya, huruf antara a hingga z) dan aksara khas (dipanggil "metacharacters")), yang menggunakan beberapa aksara khusus yang dipratentukan dan gabungan khusus ini aksara membentuk "rentetan peraturan" ini "rentetan peraturan" digunakan untuk menyatakan logik penapisan untuk rentetan. Ungkapan biasa ialah corak teks yang menerangkan satu atau lebih rentetan untuk dipadankan semasa mencari teks.
Selepas bercakap banyak perkara yang tidak masuk akal, anda mungkin masih keliru , kita masukkan sekeping teks.
hello, nama saya Tina, nombor telefon saya 123456 dan web saya ialah http://tina.com.
[a-zA-z]+://[^\s]*
Kita boleh dapatkan pautan web, Iaitu, url dalam teks bukankah ia menakjubkan?
Ini kerana ia mempunyai peraturan padanannya sendiri, antaranya adalah seperti berikut.
模式 | 描述 |
. | 任意字符 |
* | 0个或者多个表达式 |
+ | 一个或者多个表达式 |
Anda boleh menyemak lebih banyak peraturan padanan sendiri.
?,*+,d,w adakah semua aksara yang setara
adalah bersamaan dengan panjang yang sepadan {0,1}
* bersamaan dengan panjang yang sepadan {0,}
+ bersamaan dengan panjang yang sepadan {1, }
d bersamaan dengan [0-9]
D bersamaan dengan [^0-9]
w bersamaan dengan [A-Za-z_0-9]
W bersamaan dengan [^A-Za-z_0-9]
Di sini kami memperkenalkan kaedah padanan yang biasa digunakan - match(). Dengan menghantar rentetan untuk dipadankan dan ungkapan biasa, anda boleh mengesan ungkapan biasa . Sama ada ungkapan itu sepadan dengan rentetan.
res = re.match('hello\s(\d+)sword')
res = re.match('hello.*(\d+)sword')
Ini adalah perkara yang paling kami gunakan, mari lihat cara ini digunakan.
import re useData = str(input('请输入字符串数据:')) ''' 匹配字符串中的数字,+是匹配前面的子表达式一次或多次 ''' digital = re.findall('\d+',useData) print(digital)
Mari kita lihat hasil yang sedang dijalankan
Fungsi findall() mengembalikan semua rentetan yang dipadankan dan jenis data nilai pulangan ialah senarai.
Mari kita bincangkan tentang simbol biasa ungkapan biasa.
Watak "." sepadan dengan mana-mana watak tunggal.
Watak "" ialah watak melarikan diri.
"[…]" ialah set watak.
“(.*?)” ialah aksara yang paling biasa digunakan dalam perangkak ular sawa Ia dipanggil algoritma tamak dan boleh memadankan mana-mana aksara.
Mari lihat contoh kod di bawah.
import re a=‘xxixxjshdxxlovexxsfhxxpythonxx' data=re.findall(‘xx(.*?)xx') print(data)
Jom jalankan dan lihat kesannya.
Hasil jalankan
[‘I’,‘love’,‘python’]
Kononnya aksara khas , iaitu aksara dengan makna istimewa, seperti yang terdapat dalam runoo*b Secara ringkasnya, ia mewakili makna mana-mana rentetan. Jika anda ingin mencari simbol * dalam rentetan, anda perlu melepaskan *, iaitu, tambah sebelum itu, runo*ob sepadan dengan runo*ob rentetan.
Banyak aksara meta memerlukan layanan istimewa apabila cuba memadankannya. Untuk memadankan watak istimewa ini, anda mesti terlebih dahulu "melarikan diri" watak itu, iaitu, mendahuluinya dengan aksara sengkang terbalik. Jadual berikut menyenaraikan aksara khas dalam ungkapan biasa:
Watak Khas | Penerangan | $ |
|
() | Menandai permulaan dan akhir subungkapan. Subungkapan boleh diperolehi untuk kegunaan kemudian. Untuk memadankan aksara ini, gunakan ( dan ). |
* | Padan dengan subungkapan sebelumnya sifar atau lebih kali. Untuk memadankan aksara *, gunakan *. |
+ | Memadankan subungkapan sebelumnya satu kali atau lebih. Untuk memadankan aksara +, gunakan +. |
. | Memadankan mana-mana aksara tunggal kecuali aksara baris baharu n. Untuk memadankan , gunakan . |
概念说了一大堆,大家可能也记不住,我直接说几个案例,大家就能明白其他的道理。
这是某网的HTML,部分片段如下:
<span class=“price”>§<i>123</i></span> <span class=“price”>§<i>133</i></span> <span class=“price”>§<i>156</i></span> <span class=“price”>§<i>189</i></span>
大家会发现只有中间的一段不一样,而不一样的数据就是我们想要的,我们怎么用正则表达式提取出来呢.
<span class=“price”>§<i>(.*?)</i></span>
就可以了,我们看看效果吧。
123
133
156
189
Atas ialah kandungan terperinci Prinsip asasnya ialah menggunakan satu siri aksara dan sintaks khas untuk memadankan dan memanipulasi data teks. Ungkapan biasa biasanya terdiri daripada rentetan corak yang menerangkan corak teks yang akan dipadankan, dan satu atau lebih aksara dan sintaks khas yang mengawal bagaimana dan apakah hasilnya. Ungkapan biasa dalam Python biasanya dilaksanakan menggunakan modul semula. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!