2016-07-28 87 views
0

我想找到所有对被分隔的单词“:” 让我举例说明:分词的特殊字符

aa:bbb 

(输出)MATCH1 => AA; BBB

aa: bbb ccc 

(输出)MATCH1 => AA; bbb ccc

aaa: bbbbb ccc ddd: eeee 

(输出)match1 => aaa; bbbb ccc (输出)match2 => ddd; EEE


我发现2的正则表达式:

1)\s*([a-z0-9]+)+\s*\:\s*([a-z0-9]+)+

2)(.*)\:(.+?)(?=[a-z0-9]*\s*:)

第一找到的所有一次出现但在这种情况下,例如(字不起作用由空格分隔像bbbbb ccc):

aaa: bbbbb ccc 

但工作在t他的情况:

aa: bbb ccc:dd eeee:fff 

第二没有发现在这种情况下所有的次数,但工作:

aaa: bbbbb ccc 
+1

根据你的例子,你为什么要用正则表达式呢?请阅读[为什么不应该在有更好的方法时使用正则表达式](http://programmers.stackexchange.com/questions/113237/when-you-should-not-use-regular-expressions)。用常规的split(':')'动作来分割示例是首选。 –

回答

0

要使用正则表达式的回答,尽管它可能不会做到这一点的最好办法:

(\w+ *):([\w ]+)(?!\w* *:)

Demo here

我做两个C一组之后,1个在:之前,一个在之后。

为了确保我的第二个捕获组没有采用下一个捕获的“关键”,我使用了负向预测来确保我无法匹配刚才的关键字的格式(之前的任何单词或空格字符一个:)

完全匹配的钥匙我用\w+ *在免得一个字符之后或一个或更多的空间,为负先行\w* *:不被肯定,我不能匹配单个:,也不a:a :

对于我使用的字符类的值,任何单词字符(\wa-zA-Z0-9_ )或空间至少一次。