Regular expression untuk pencocokan garis lintang/garis bujur?
I'm mencoba untuk membuat regular expression untuk pencocokan lintang/bujur. Untuk pencocokan nomor presisi ganda I've digunakan (\-?\d+(\.\d+)?)
, dan mencoba untuk menggabungkan menjadi satu ungkapan:
^(\-?\d+(\.\d+)?),\w*(\-?\d+(\.\d+)?)$
Saya harapkan ini untuk pertandingan ganda, koma, mungkin beberapa ruang, dan lain ganda, tapi itu doesn't tampaknya bekerja. Secara khusus ini hanya bekerja jika ada's TIDAK ada ruang, tidak satu atau lebih. Apa yang telah saya lakukan salah?
128
18
Yang satu ini benar-benar akan cocok dengan lintang dan bujur nilai-nilai yang jatuh dalam kisaran yang tepat:
Pertandingan
Doesn't Pertandingan
Spasi adalah \s, tidak \w
Melihat apakah ini bekerja
Saya menggunakan orang-orang ini (format desimal, dengan 6 digit desimal):
Lintang
[![Latitude ekspresi Reguler visualisasi][1]][1]
Bujur
[![Longitude ekspresi Reguler visualisasi][2]][2]
[Di sini][3] adalah sebuah inti yang menguji kedua, dilaporkan di sini juga, untuk kemudahan akses. It's Jawa TestNG tes. Anda perlu Slf4j, Hamcrest dan Lombok untuk menjalankannya:
Sebenarnya Alix Axel, di atas regex adalah salah latitude, longitude berkisar point of view.
Pengukuran lintang berkisar dari -90° hingga +90° Bujur pengukuran berkisar dari -180° sampai +180°
Jadi regex yang diberikan di bawah ini memvalidasi lebih akurat. Juga, per saya pikir tidak ada yang harus membatasi titik desimal di lintang/bujur.
ATAU untuk Tujuan C
Regex rincian:
-?
# menerima nilai-nilai negatif^
# Mulai dari string[0-9]{1,3}
# Pertandingan 1-3 digit (i. e. 0-999)(?:
# Cobalah untuk mencocokkan...\.
# titik desimal[0-9]{1,10}
# diikuti oleh satu sampai 10 digit (i. e. 0-9999999999))?
# opsional ...$
# Akhir stringCoba ini:
Check it out di:
http://regexpal.com/
Paste ekspresi di atas kotak, kemudian menempatkan hal-hal seperti ini di kotak bawah:
Regex rincian:
Sekarang, apa ini TIDAK lakukan adalah membatasi dirinya untuk kisaran ini:
Sebaliknya, itu sederhana membatasi dirinya untuk kisaran ini:
Tapi intinya adalah terutama hanya untuk memecah setiap bagian dari ekspresi.
Di sini adalah yang lebih ketat versi:
-90
--+90
-180
--+180
Python:
Lintang:
hasil = re.pertandingan("^[+-]?((90\.?0*$)|(([0-8]?[0-9])\.?[0-9]*$))", '-90.00001')
Bujur:
hasil = re.pertandingan("^[+-]?((180\.?0*$)|(((1[0-7][0-9])|([0-9]{0,2}))\.?[0-9]*$))", '-0.0000')
Lintang harus gagal dalam contoh.
Saya percaya anda're menggunakan \w (kata karakter) di mana anda harus menggunakan \s (spasi). Kata karakter biasanya terdiri dari [A-Za-z0-9_], sehingga tidak termasuk ruang anda, yang kemudian lebih lanjut gagal untuk mencocokkan pada opsional tanda minus atau digit.
Ini akan bekerja untuk format seperti ini: 31 37.4' E
@makro-ferrari saya tidak menemukan cara untuk mempersingkat, dan tanpa melihat aheads dalam terang dari semua pembicaraan terakhir tentang regex mesin
Ruby
Bujur -179.99999999..180
Lintang -89.99999999..90
Lengkap dan metode sederhana dalam objective C untuk memeriksa pola yang benar untuk lintang dan bujur adalah:
dimana searchedString input user tersebut akan masuk di masing-masing textfield.
PHP
Berikut adalah PHP's versi (masukan nilai:
$lintang
dan$bujur
):Anda dapat mencoba ini:
Coba ini:
Coba ini: