我想找到由"分隔的所有单词对:" 让我用例子来解释:
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
答案 0 :(得分:0)
用正则表达式回答尽管它可能不是最好的方法:
(\w+ *):([\w ]+)(?!\w* *:)
我制作了两个捕获组,一个在:
之前,一个在之后。
为了确保我的第二个捕获组没有使用下一个捕获组的“密钥”,我使用了一个负向前瞻,以确保我无法匹配之后的任何字符或空格字符。 :)
为了准确匹配密钥,我使用\w+ *
至少一个字符串跟随或不是一个或多个空格,而负向预告\w* *:
确保我无法匹配单个:
1}},也不是a:
或a :
对于我使用字符类的值,任何单词字符(\w
为a-zA-Z0-9_
)或空格至少一次。