Сложный вопрос регулярных выражений, данные могут быть или не быть в скобках - PullRequest
2 голосов
/ 21 марта 2010

Мне нужно извлечь данные из источника, который представляет их одним из двух способов. Данные могут быть отформатированы так:

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

Или вот так:

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

Данные, которые мне нужно извлечь, - это процент и партия (это результаты выборов), которые либо в скобках (первый пример), либо являются единственным нечисловым текстом.

Пока у меня есть это:

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

Что дает мне следующие совпадения (для первого примера):

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

Итак, у меня есть процент, но мне также нужен ярлык партии, который может быть или не быть в скобках, а может и не быть единственным текстом. Кто-нибудь может помочь?

1 Ответ

1 голос
/ 21 марта 2010

У партийных символов есть пробелы?Если нет, это должно сработать:

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

Регулярное выражение привязано к необработанному числу и проценту;эта партия является лишь последней последовательностью без пробелов, предшествующей им, и может заключаться или не заключаться в квадратные скобки.

...