Jadi saya melakukan proyek di mana saya harus menulis sebuah program yang membuka semua file .rtf dalam folder dan mencari baris apa pun yang cocok dengan ekspresi reguler yang disediakan pengguna dan hasilnya harus dicetak ke layar.

Kodenya cukup mudah tetapi saya mengalami kesulitan untuk menulis regex yang akan cocok dengan file apa pun yang diakhiri dengan .rtf.

Berikut adalah string dari semua file di dalam folder tempat Python akan mencari file yang diakhiri dengan .rtf:

rxn of glucose.png Screen Shot 2017-07-17 at 8.25.30 AM.png Screen Shot 2017-08-18 at 11.23.21 AM.png Screen Shot 2017-08-18 at 11.36.27 AM.png Screen Shot 2017-08-19 at 6.06.19 AM.png SSS.rtf Untitled 2.rtf Untitled 3.rtf Untitled 4.rtf Untitled.rtf.

Saya mencoba banyak regex seperti:

1) (\w+\.rtf)

Lihat hasilnya:https://regex101.com/r/oZzN6T/1

2)[a-zA-Z0-9].rtf

https://regex101.com/r/RaeL0Z/1

3) .+\.rtf

https://regex101.com/r/8hRIGo/1

Hasil yang diinginkan adalah : Untitled 2.rtf Untitled 3.rtf Untitled 4.rtf Untitled.rtf SSS.rtf tetapi beberapa regex di atas cocok dengan beberapa bagian dari file ini dan yang lainnya cocok dengan seluruh teks itu sendiri!

Tak satu pun dari regex ini berfungsi dengan baik. Saya mengerti mengapa mereka tidak berfungsi tetapi saya tidak dapat memperbaikinya. Bagaimana saya harus memodifikasinya atau apa yang seharusnya menjadi regex baru yang akan cocok dengan file dengan ekstensi .rtf dalam string yang diberikan?

-3
M.Hamel 19 Agustus 2017, 06:01

2 jawaban

Jawaban Terbaik

Saya akan menyebutkan bahwa ini sepertinya pekerjaan untuk python, tetapi inilah yang saya buat untuk menjawab pertanyaan Anda hanya dengan menggunakan regex:

((?<=\.\w{3} )|^)[\w ]+\.rtf

Ini berhasil menemukan semua file dengan ekstensi ".rtf", bahkan di awal string, dengan mulai mencari setelah akhir nama file terbaru atau di awal string. Namun, ini mengasumsikan bahwa semua ekstensi file memiliki panjang 3 karakter. Jika Anda mungkin memiliki ekstensi file dengan panjang 2 (misalnya, *.7z) atau yang lainnya, Anda harus menambahkan (?<=\.\w{2} )| (atau berapa pun panjang file lainnya) setelah kurung buka pertama. Ini akan memberi Anda:

((?<=\.\w{2} )|(?<=\.\w{3} )|^)[\w ]+\.rtf

2
windedmoose 19 Agustus 2017, 13:22

Cocok dengan semua karakter yang dapat dicetak tidak peka huruf besar-kecil yang diakhiri dengan .rtf

/^[ -~]\.rtf$/i
0
lluisrojass 19 Agustus 2017, 03:09