2015-02-06 75 views
1

对不起分隔的多个字的,但坚持这一个...正则表达式来提取2组由多个空格

我有一个包含在左侧和价值右侧的键线,拥有多项空间插图中。

例如(我不得不使用 '_' 代表 '' 作为修剪#1的多个空格):

产品NAME________________________________Super 4HP割草机

产品MANUFACTURER_______________________________Honda

一键或值可以匹配任何一组字母,数字和字符,如“,”等:

如何创建正则表达式来分别提取密钥和值?

+0

实际上,这是*算法上不可能的*除非你规定“____”必须至少有2个空格,键/值只能包含单个单词之间的空格。这是一个有效的假设吗? – 2015-02-06 06:30:31

+0

是的,不幸的是,数据文件格式很差。以编程方式可靠地处理它几乎是不可能的。 – pfeds 2015-02-06 08:05:45

回答

2

\s{2,}匹配两个或多个空格。

^(.*?)\s{2,}(.*)$ 

所以第一(.*?)捕捉任意数量的字符,直到达到双重空间。 \s{2,}贪婪地匹配两个或更多的中间空间。然后下一个捕获组(.*)捕获值部分。只要抓住关键环节,从组索引1和值部分来自组索引2

DEMO

在PHP中,你可以做喜欢

$txt = <<<EOT 
PRODUCT NAME Super   4HP Mower 
PRODUCT MANUFACTURER   Honda 
EOT; 
preg_match_all('~^(.*?)\s{2,}(.*)$~m', $txt, $match); 
print_r($match[1]); 
print_r($match[2]); 

输出:

Array 
(
    [0] => PRODUCT NAME Super 
    [1] => PRODUCT MANUFACTURER 
) 
Array 
(
    [0] => 4HP Mower 
    [1] => Honda 
) 
+0

完美,谢谢。 – pfeds 2015-02-06 07:00:54

+0

很高兴工作.. – 2015-02-06 07:08:23