Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Python

Python RegEx

Python RegEx

Dalam tutorial ini, Anda akan belajar tentang ekspresi reguler (RegEx), dan menggunakan modul re Python untuk bekerja dengan RegEx (dengan bantuan contoh).

Sebuah Reg ular Mantan pression (RegEx) adalah urutan karakter yang mendefinisikan pola pencarian. Misalnya,

^a...s$

Kode di atas mendefinisikan pola RegEx. Polanya adalah:setiap string lima huruf yang dimulai dengan a dan diakhiri dengan s .

Pola yang ditentukan menggunakan RegEx dapat digunakan untuk mencocokkan dengan string.

Ekspresi String Cocok?
^a...s$ abs Tidak cocok
alias Pertandingan
abyss Pertandingan
Alias Tidak cocok
An abacus Tidak cocok

Python memiliki modul bernama re untuk bekerja dengan RegEx. Ini contohnya:

import re

pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)

if result:
  print("Search successful.")
else:
  print("Search unsuccessful.")	

Di sini, kami menggunakan re.match() berfungsi untuk mencari pola dalam test_string . Metode mengembalikan objek yang cocok jika pencarian berhasil. Jika tidak, ia mengembalikan None .


Ada beberapa fungsi lain yang didefinisikan dalam re modul untuk bekerja dengan RegEx. Sebelum kita menjelajahinya, mari kita pelajari tentang ekspresi reguler itu sendiri.

Jika Anda sudah mengetahui dasar-dasar RegEx, lompat ke Python RegEx.


Tentukan Pola Menggunakan RegEx

Untuk menentukan ekspresi reguler, metakarakter digunakan. Pada contoh di atas, ^ dan $ adalah metakarakter.


MetaCharacters

Metakarakter adalah karakter yang diinterpretasikan secara khusus oleh mesin RegEx. Berikut daftar metakarakter:

[] . ^ $ * + ? {} () \ |


[] - Tanda kurung siku

Tanda kurung siku menentukan sekumpulan karakter yang ingin Anda cocokkan.

Ekspresi String Cocok?
[abc] a 1 pertandingan
ac 2 pertandingan
Hey Jude Tidak cocok
abc de ca 5 pertandingan

Di sini, [abc] akan cocok jika string yang Anda coba cocokkan berisi salah satu dari a , b atau c .

Anda juga dapat menentukan rentang karakter menggunakan - di dalam tanda kurung siku.

Anda dapat melengkapi (membalikkan) set karakter dengan menggunakan tanda sisipan ^ simbol di awal tanda kurung siku.


. - Periode

Tanda titik cocok dengan satu karakter apa pun (kecuali baris baru '\n' ).

Ekspresi String Cocok?
.. a Tidak cocok
ac 1 pertandingan
acd 1 pertandingan
acde 2 kecocokan (berisi 4 karakter)

^ - Karpet

Simbol tanda sisipan ^ digunakan untuk memeriksa apakah string dimulai dengan karakter tertentu.

Ekspresi String Cocok?
^a a 1 pertandingan
abc 1 pertandingan
bac Tidak cocok
^ab abc 1 pertandingan
acb Tidak cocok (dimulai dengan a tetapi tidak diikuti oleh b )

$ - Dolar

Simbol dolar $ digunakan untuk memeriksa apakah string diakhiri dengan karakter tertentu.

Ekspresi String Cocok?
a$ a 1 pertandingan
formula 1 pertandingan
cab Tidak cocok

* - Bintang

Simbol bintang * cocok dengan nol atau lebih kekerapan dari pola yang tersisa.

Ekspresi String Cocok?
ma*n mn 1 pertandingan
man 1 pertandingan
maaan 1 pertandingan
main Tidak cocok (a tidak diikuti oleh n )
woman 1 pertandingan

+ - Plus

Simbol plus + cocok dengan satu atau beberapa kejadian dari pola yang tersisa.

Ekspresi String Cocok?
ma+n mn Tidak cocok (tidak ada a karakter)
man 1 pertandingan
maaan 1 pertandingan
main Tidak ada yang cocok (a tidak diikuti oleh n)
woman 1 pertandingan

? - Tanda Tanya

Simbol tanda tanya ? cocok dengan nol atau satu kejadian dari pola yang tersisa.

Ekspresi String Cocok?
ma?n mn 1 pertandingan
man 1 pertandingan
maaan Tidak ada yang cocok (lebih dari satu a karakter)
main Tidak ada yang cocok (a tidak diikuti oleh n)
woman 1 pertandingan

{} - Kawat Gigi

Perhatikan kode ini:{n,m} . Ini berarti setidaknya n , dan paling banyak m pengulangan pola yang tersisa.

Ekspresi String Cocok?
a{2,3} abc dat Tidak cocok
abc daat 1 kecocokan (di daat )
aabc daaat 2 kecocokan (di aabc dan daaat )
aabc daaaat 2 kecocokan (di aabc dan daaaat )

Mari kita coba satu contoh lagi. RegEx ini [0-9]{2, 4} cocok dengan setidaknya 2 digit tetapi tidak lebih dari 4 digit

Ekspresi String Cocok?
[0-9]{2,4} ab123csde 1 kecocokan (cocok di ab123csde )
12 and 345673 3 kecocokan (12 , 3456 , 73 )
1 and 2 Tidak cocok

| - Alternatif

Bilah vertikal | digunakan untuk pergantian (or operator).

Ekspresi String Cocok?
a|b cde Tidak cocok
ade 1 kecocokan (cocok di ade )
acdbea 3 kecocokan (di acdbea )

Di sini, a|b cocok dengan string apa pun yang berisi a atau b


() - Grup

Tanda kurung () digunakan untuk mengelompokkan sub-pola. Misalnya, (a|b|c)xz cocok dengan string apa pun yang cocok dengan a atau b atau c diikuti oleh xz

Ekspresi String Cocok?
(a|b|c)xz ab xz Tidak cocok
abxz 1 kecocokan (cocok di abxz )
axz cabxz 2 kecocokan (di axzbc cabxz )

\ - Garis miring terbalik

Serangan balik \ digunakan untuk menghindari berbagai karakter termasuk semua metakarakter. Misalnya,

\$a cocok jika string berisi $ diikuti oleh a . Di sini, $ tidak ditafsirkan oleh mesin RegEx dengan cara khusus.

Jika Anda tidak yakin apakah suatu karakter memiliki arti khusus atau tidak, Anda dapat memasukkan \ di depannya. Ini memastikan karakter tidak diperlakukan dengan cara khusus.


Urutan Khusus

Urutan khusus membuat pola yang umum digunakan lebih mudah untuk ditulis. Berikut daftar urutan khusus:

\A - Cocok jika karakter yang ditentukan berada di awal string.

Ekspresi String Cocok?
\Athe the sun Pertandingan
In the sun Tidak cocok

\b - Cocok jika karakter yang ditentukan berada di awal atau akhir kata.

Ekspresi String Cocok?
\bfoo football Pertandingan
a football Pertandingan
afootball Tidak cocok
foo\b the foo Pertandingan
the afoo test Pertandingan
the afootest Tidak cocok

\B - Berlawanan dengan \b . Cocok jika karakter yang ditentukan tidak di awal atau akhir kata.

Ekspresi String Cocok?
\Bfoo football Tidak cocok
a football Tidak cocok
afootball Pertandingan
foo\B the foo Tidak cocok
the afoo test Tidak cocok
the afootest Pertandingan

\d - Cocok dengan angka desimal apa pun. Setara dengan [0-9]

Ekspresi String Cocok?
\d 12abc3 3 kecocokan (di 12abc3 )
Python Tidak cocok

\D - Cocok dengan digit non-desimal apa pun. Setara dengan [^0-9]

Ekspresi String Cocok?
\D 1ab34"50 3 kecocokan (di 1ab34"50 )
1345 Tidak cocok

\s - Cocok dengan string yang berisi karakter spasi apa pun. Setara dengan [ \t\n\r\f\v] .

Ekspresi String Cocok?
\s Python RegEx 1 pertandingan
PythonRegEx Tidak cocok

\S - Cocok dengan string yang berisi karakter non-spasi. Setara dengan [^ \t\n\r\f\v] .

Ekspresi String Cocok?
\S a b 2 kecocokan (pada a b )
    Tidak cocok

\w - Cocok dengan karakter alfanumerik (digit dan abjad). Setara dengan [a-zA-Z0-9_] . Omong-omong, garis bawahi _ juga dianggap sebagai karakter alfanumerik.

Ekspresi String Cocok?
\w 12&": ;c 3 kecocokan (di 12&": ;c )
%"> ! Tidak cocok

\W - Cocok dengan karakter non-alfanumerik apa pun. Setara dengan [^a-zA-Z0-9_]

Ekspresi String Cocok?
\W 1a2%c 1 kecocokan (pada 1a2%c )
Python Tidak cocok

\Z - Cocok jika karakter yang ditentukan berada di akhir string.

Ekspresi String Cocok?
Python\Z I like Python 1 pertandingan
I like Python Programming Tidak cocok
Python is fun. Tidak cocok

Kiat: Untuk membangun dan menguji ekspresi reguler, Anda dapat menggunakan alat penguji RegEx seperti regex101. Alat ini tidak hanya membantu Anda dalam membuat ekspresi reguler, tetapi juga membantu Anda mempelajarinya.

Sekarang Anda memahami dasar-dasar RegEx, mari kita bahas cara menggunakan RegEx dalam kode Python Anda.


Python RegEx

Python memiliki modul bernama re untuk bekerja dengan ekspresi reguler. Untuk menggunakannya, kita perlu mengimpor modul.

import re

Modul ini mendefinisikan beberapa fungsi dan konstanta untuk bekerja dengan RegEx.


re.findall()

re.findall() metode mengembalikan daftar string yang berisi semua kecocokan.


Contoh 1:re.findall()


# Program to extract numbers from a string

import re

string = 'hello 12 hi 89. Howdy 34'
pattern = '\d+'

result = re.findall(pattern, string) 
print(result)

# Output: ['12', '89', '34']

Jika pola tidak ditemukan, re.findall() mengembalikan daftar kosong.


re.split()

re.split metode membagi string di mana ada kecocokan dan mengembalikan daftar string di mana pemisahan telah terjadi.


Contoh 2:re.split()


import re

string = 'Twelve:12 Eighty nine:89.'
pattern = '\d+'

result = re.split(pattern, string) 
print(result)

# Output: ['Twelve:', ' Eighty nine:', '.']

Jika pola tidak ditemukan, re.split() mengembalikan daftar yang berisi string asli.


Anda dapat melewati maxsplit argumen ke re.split() metode. Ini adalah jumlah maksimum pemisahan yang akan terjadi.


import re

string = 'Twelve:12 Eighty nine:89 Nine:9.'
pattern = '\d+'

# maxsplit = 1
# split only at the first occurrence
result = re.split(pattern, string, 1) 
print(result)

# Output: ['Twelve:', ' Eighty nine:89 Nine:9.']

Omong-omong, nilai default maxsplit adalah 0; artinya semua kemungkinan pemisahan.


re.sub()

Sintaks re.sub() adalah:

re.sub(pattern, replace, string)

Metode mengembalikan string di mana kemunculan yang cocok diganti dengan konten replace variabel.


Contoh 3:re.sub()


# Program to remove all whitespaces
import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'

# empty string
replace = ''

new_string = re.sub(pattern, replace, string) 
print(new_string)

# Output: abc12de23f456

Jika pola tidak ditemukan, re.sub() mengembalikan string asli.


Anda dapat melewati count sebagai parameter keempat ke re.sub() metode. Jika dihilangkan, hasilnya menjadi 0. Ini akan menggantikan semua kemunculan.


import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'
replace = ''

new_string = re.sub(r'\s+', replace, string, 1) 
print(new_string)

# Output:
# abc12de 23
# f45 6

re.subn()

re.subn() mirip dengan re.sub() kecuali ia mengembalikan tuple dari 2 item yang berisi string baru dan jumlah penggantian yang dilakukan.


Contoh 4:re.subn()


# Program to remove all whitespaces
import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'

# empty string
replace = ''

new_string = re.subn(pattern, replace, string) 
print(new_string)

# Output: ('abc12de23f456', 4)

re.search()

re.search() metode membutuhkan dua argumen:pola dan string. Metode ini mencari lokasi pertama di mana pola RegEx menghasilkan kecocokan dengan string.

Jika pencarian berhasil, re.search() mengembalikan objek yang cocok; jika tidak, ia mengembalikan None .

match = re.search(pattern, str)

Contoh 5:re.search()


import re

string = "Python is fun"

# check if 'Python' is at the beginning
match = re.search('\APython', string)

if match:
  print("pattern found inside the string")
else:
  print("pattern not found")  

# Output: pattern found inside the string

Di sini, cocok berisi objek yang cocok.


Cocokkan objek

Anda bisa mendapatkan metode dan atribut dari objek yang cocok menggunakan fungsi dir().

Beberapa metode dan atribut objek pencocokan yang umum digunakan adalah:


match.group()

group() metode mengembalikan bagian dari string yang cocok.

Contoh 6:Mencocokkan objek


import re

string = '39801 356, 2102 1111'

# Three digit number followed by space followed by two digit number
pattern = '(\d{3}) (\d{2})'

# match variable contains a Match object.
match = re.search(pattern, string) 

if match:
  print(match.group())
else:
  print("pattern not found")

# Output: 801 35

Di sini, cocok variabel berisi objek yang cocok.

Pola kami (\d{3}) (\d{2}) memiliki dua subgrup (\d{3}) dan (\d{2}) . Anda bisa mendapatkan bagian dari string subkelompok yang diberi tanda kurung ini. Begini caranya:

>>> match.group(1)
'801'

>>> match.group(2)
'35'
>>> match.group(1, 2)
('801', '35')

>>> match.groups()
('801', '35')

match.start(), match.end() dan match.span()

start() fungsi mengembalikan indeks awal substring yang cocok. Demikian pula, end() mengembalikan indeks akhir dari substring yang cocok.

>>> match.start()
2
>>> match.end()
8

span() fungsi mengembalikan tuple yang berisi indeks awal dan akhir dari bagian yang cocok.

>>> match.span()
(2, 8)

match.re dan match.string

re atribut objek yang cocok mengembalikan objek ekspresi reguler. Demikian pula, string atribut mengembalikan string yang diteruskan.

>>> match.re
re.compile('(\\d{3}) (\\d{2})')

>>> match.string
'39801 356, 2102 1111'

Kami telah membahas semua metode yang umum digunakan yang didefinisikan dalam re modul. Jika Anda ingin mempelajari lebih lanjut, kunjungi modul Python 3.


Menggunakan awalan r sebelum RegEx

Ketika r atau R awalan digunakan sebelum ekspresi reguler, itu berarti string mentah. Misalnya, '\n' adalah baris baru sedangkan r'\n' berarti dua karakter:garis miring terbalik \ diikuti oleh n .

Serangan balik \ digunakan untuk menghindari berbagai karakter termasuk semua metakarakter. Namun, menggunakan r awalan membuat \ perlakukan sebagai karakter normal.


Contoh 7:String mentah menggunakan awalan r


import re

string = '\n and \r are escape sequences.'

result = re.findall(r'[\n\r]', string) 
print(result)

# Output: ['\n', '\r']

Python

  1. Kata Kunci dan Pengidentifikasi Python
  2. Tipe Data Python
  3. Operator Python
  4. Argumen Fungsi Python
  5. Kamus Python
  6. Python Iterator
  7. Penutupan Python
  8. Tanggal waktu Python
  9. Modul waktu Python
  10. Python tidur()