Karmaşık regex soru, veri ya da parantez içinde olabilir veya olmayabilir

1 Cevap php

Iki yoldan biriyle sunar bir kaynaktan veri elde etmek için gereklidir. Verileri bu gibi biçimlendirilmiş olabilir:

Francis (Lab) 18,077 (60.05%); Waller (LD) 4,140 (13.75%); Evans (PC) 3,545 (11.78%); Rees-Mogg (C) 3,064 (10.18%); Wright (Veritas) 768 (2.55%); La Vey (Green) 510 (1.69%)

Ya da bunun gibi:

Lab 8,994 (33.00%); C 7,924 (29.07%); LD 5,197 (19.07%); PC 3,818 (14.01%); Others 517 (1.90%); Green 512 (1.88%); UKIP 296 (1.09%)

Ben ayıklamak için gereken verileri parantez (ilk örnek) ya veya sadece sayısal olmayan metin (bu seçim sonuçları) yüzdesi ve partidir.

Şimdiye kadar bu var:

preg_match('/(.*)\(([^)]*)%\)/', $value, $match);

Bana (ilk örnek) aşağıdaki sonuç veriyor ki:

Array
(
    [0] => Francis (Lab) 18,077 (60.05%)
    [1] => Francis (Lab) 18,077 
    [2] => 60.05
)

Yani yüzdesi var, ama ben de ya da parantez içinde olmayabilir ve veya yalnızca metin olmayabilir, hangi parti etiketi gerekir. Herkes yardımcı olabilir?

1 Cevap

Parti sembolleri hiç onlara boşluk var mı? Eğer değilse, bu hile yapmak gerekir:

'/\(?([A-Za-z]+)\)?\s*[\d,]+\s*\(([\d.]+%)\)/'

Regex ham sayı ve yüzde ile bağdaştırılır; parti onları önceki sadece son boşluk olmayan dizisidir, ve ya parantez içine olmayabilir.