Dengan Python, saya bisa mengkompilasi ekspresi reguler menjadi case-insensitive menggunakan re.compile
:
>>> s = 'TeSt'
>>> casesensitive = re.compile('test')
>>> ignorecase = re.compile('test', re.IGNORECASE)
>>>
>>> print casesensitive.match(s)
None
>>> print ignorecase.match(s)
<_sre.SRE_Match object at 0x02F0B608>
Apakah ada cara untuk melakukan hal yang sama, tetapi tanpa menggunakan re.compile
. Saya tidak dapat menemukan i
sufiks seperti Perl (misalnya m/test/i
) dalam dokumentasi.
Jawaban:
Lulus
re.IGNORECASE
denganflags
param darisearch
,match
atausub
:sumber
re.match('test', 'TeSt', re.IGNORECASE)
mungkin mengarah keTypeError
saat salah satu atribut sedangNone
. Menggunakantry & except
untuk menangkapTypeError
pencocokan dengan first_string == second_string. Contoh Kode Kodedef equal_ignore_case(first_string, second_string): try: return re.match(first_string, second_string, re.IGNORECASE) is not None except (AttributeError, TypeError): return first_string == second_string
DemoNone
pertama.flags
karenare.sub
jika tidak, argumen tersebut akan diteruskanre.IGNORECASE
kecount
argumen (s. Juga stackoverflow.com/questions/42581/… )Anda juga dapat melakukan pencarian yang tidak peka terhadap huruf besar-kecil menggunakan pencarian / kecocokan tanpa flag IGNORECASE (diuji dengan Python 2.7.3):
sumber
(?(condition)yes|no)
yang katanya ditambahkan dalam 2.4), jadi saya berharap itu selalu tersedia sejak versi pertamare
modul, yang saya pikir telah ditambahkan dalam 1.5. Pada dasarnya sejak awal waktu untuk semua maksud dan tujuan ketika datang ke Python. Ini didokumentasikan sekitar setengah jalan melalui bagian pertama dari halaman ini: docs.python.org/2/library/re.html#regular-expression-syntaxregex
modul itu ditinggalkan demire
modul.re.match(r'''A ((?i)B) C''', "a b c").group(0)
menyebabkan pencocokan case-insensitive pada segalanya (A dan C), tidak hanya pada B! Jika Anda hanya menginginkan insen yang sesuai dengan kelompok tangkapan tertentu, ini bukan droid yang Anda cari.Penanda case-insensitive,
(?i)
dapat dimasukkan langsung ke dalam pola regex:sumber
'(?i)'
Pendekatan ini juga memiliki keuntungan bahwa Anda dapat membuat daftar regexp, beberapa di antaranya tidak peka huruf besar kecil dan beberapa tidak. (Dan tentu saja, Anda dapat memetakanre.compile
daftar itu jika Anda mau.)flags=re.IGNORECASE
?Anda juga dapat mendefinisikan huruf besar-kecil selama kompilasi pola:
sumber
Di impor
Dalam pemrosesan waktu berjalan:
Harus disebutkan bahwa tidak menggunakan
re.compile
itu boros. Setiap kali metode pencocokan di atas dipanggil, ekspresi reguler akan dikompilasi. Ini juga praktik yang salah dalam bahasa pemrograman lain. Di bawah ini adalah praktik yang lebih baik.Dalam inisialisasi aplikasi:
Dalam pemrosesan waktu berjalan:
sumber
re.compile()
....sumber
Untuk melakukan operasi case-insensitive, berikan re.IGNORECASE
dan jika kami ingin mengganti teks yang cocok dengan case ...
sumber
Jika Anda ingin mengganti tetapi tetap mempertahankan gaya str sebelumnya. Itu mungkin.
Sebagai contoh: sorot string "test asdasd TEST asd tEst asdasd".
test asdasd TEST asd tEst asdasd
sumber
Untuk ekspresi reguler yang tidak sensitif huruf (Regex): Ada dua cara dengan menambahkan kode Anda:
flags=re.IGNORECASE
Penanda case-insensitive
(?i)
sumber