Bagaimana cara membuat regex python "(.*)"
seperti itu, mengingat "a (b) c (d) e"
cocok python "b"
bukan "b) c (d"
?
Saya tahu bahwa saya bisa menggunakan "[^)]"
bukan "."
, tapi saya mencari solusi yang lebih umum yang membuat regex saya sedikit lebih bersih. Apakah ada cara untuk memberi tahu python "hei, cocokkan ini secepat mungkin"?
python
regex
regex-greedy
So8res
sumber
sumber
*?
?Menurut dokumen :
sumber
Tidak akan
\\(.*?\\)
bekerja Itu adalah sintaksis yang tidak rakus.sumber
Seperti yang orang lain katakan menggunakan? modifier pada * quantifier akan menyelesaikan masalah langsung Anda, tetapi hati-hati, Anda mulai menyimpang ke daerah di mana regex berhenti bekerja dan Anda membutuhkan parser sebagai gantinya. Misalnya, string "(foo (bar)) baz" akan menyebabkan masalah bagi Anda.
sumber
Menggunakan pertandingan yang tidak cocok adalah awal yang baik, tetapi saya juga menyarankan Anda mempertimbangkan kembali penggunaan
.*
- bagaimana dengan ini?sumber
Apakah Anda ingin mencocokkan "(b)"? Lakukan seperti yang disarankan Zitrax dan Paolo. Apakah Anda ingin mencocokkan "b"? Melakukan
sumber
Untuk mulai dengan, saya tidak menyarankan menggunakan "*" di regex. Ya, saya tahu, ini adalah pembatas multi-karakter yang paling banyak digunakan, tetapi bagaimanapun juga itu adalah ide yang buruk. Ini karena, meskipun cocok dengan jumlah pengulangan untuk karakter itu, "any" termasuk 0, yang biasanya merupakan sesuatu yang Anda ingin lontarkan kesalahan sintaksinya, tidak terima. Alih-alih, saya sarankan menggunakan
+
tanda, yang cocok dengan pengulangan panjang> 1. Terlebih lagi, dari apa yang saya lihat, Anda berhadapan dengan ekspresi yang dipatenkan dengan panjang tetap. Akibatnya, Anda mungkin dapat menggunakan{x, y}
sintaks untuk secara spesifik menentukan panjang yang diinginkan.Namun, jika Anda benar-benar membutuhkan pengulangan yang tidak rakus, saya sarankan berkonsultasi dengan yang mahakuasa
?
. Ini, ketika ditempatkan setelah pada akhir setiap specifier pengulangan regex, akan memaksa bagian dari regex untuk menemukan jumlah teks sesedikit mungkin.Yang sedang berkata, saya akan sangat berhati-hati dengan
?
itu, seperti Sonic Obeng di Dr Who, memiliki kecenderungan untuk melakukan, bagaimana saya harus mengatakannya, "sedikit" hal-hal yang tidak diinginkan jika tidak hati-hati dikalibrasi. Misalnya, untuk menggunakan input contoh Anda, ini akan mengidentifikasi((1)
(perhatikan kurangnya rparen kedua) sebagai kecocokan.sumber