复杂的正则表达式问题,数据可能在括号内,也可能不在括号内

时间:2010-03-21 15:02:03

标签: php regex preg-match

我需要从以两种方式之一呈现它的源中提取数据。数据的格式如下:

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 个答案:

答案 0 :(得分:1)

派对符号中是否有空格?如果没有,这应该可以解决问题:

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

正则表达式以原始数字和百分比为基础;派对只是它们之前的最后一个非空白序列,可能会也可能不会括在括号中。