通过特殊字符分词

时间:2016-07-28 12:37:12

标签: regex

我想找到由"分隔的所有单词对:" 让我用例子来解释:

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

但在这种情况下工作:

aa: bbb ccc:dd eeee:fff

第二个没有找到所有出现但在这种情况下工作:

aaa: bbbbb ccc

1 个答案:

答案 0 :(得分:0)

用正则表达式回答尽管它可能不是最好的方法:

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

Demo here

我制作了两个捕获组,一个在:之前,一个在之后。

为了确保我的第二个捕获组没有使用下一个捕获组的“密钥”,我使用了一个负向前瞻,以确保我无法匹配之后的任何字符或空格字符。 :)

为了准确匹配密钥,我使用\w+ *至少一个字符串跟随或不是一个或多个空格,而负向预告\w* *:确保我无法匹配单个: 1}},也不是a:a :

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