Domanda

ho bisogno di estrarre i dati da una fonte che la presenta in uno dei due modi. I dati potrebbero essere formattati in questo modo:

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%)

O come questa:

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%)

I dati che ho bisogno di estrarre è la percentuale e il partito (questi sono i risultati delle elezioni), che è o tra parentesi (primo esempio), o è l'unico testo non numerico.

Finora ho questo:

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

Il che mi sta dando le seguenti partite (per il primo esempio):

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

Così ho la percentuale, ma ho anche bisogno l'etichetta partito, che può o non può essere tra parentesi e può o non può essere l'unico testo. Chiunque può aiutare?

È stato utile?

Soluzione

Non simboli di partito mai hanno spazi bianchi in loro? In caso contrario, questo dovrebbe fare il trucco:

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

La regex è ancorato dal numero grezzo e la percentuale; il partito è solo l'ultima sequenza non-spazi bianchi li precede, e può o non può essere racchiuso tra parentesi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top