RegEx捕获两个定界符之间的文本,包括“ shared”

时间:2019-02-21 05:31:55

标签: c# regex

如果我有以下文字...

The quick :brown:fox: jumped over the lazy :dog:.

我想要一个正则表达式来捕获2个:个字符之间的所有单词。在上面的示例中,它应该返回:brown::fox::dog:

到目前为止,我有这个(\:{1}.\w*\s*\:{1}),它返回:brown::dog:。我不太清楚如何在两个匹配的组之间共享 :,以便它也将返回':fox:'

1 个答案:

答案 0 :(得分:2)

这是一个可以工作的简单模式:

(?<=:)(\w+)(?=:)

这使用环顾四周来确保一个或多个单词字符前后用冒号括起来。查看下面的演示以查看其工作原理。

该匹配项将成为第一个捕获组。实际上,它也应该作为整个比赛本身可用,因为环顾四周不会消耗任何东西。

Demo

我喜欢上面的环顾四周方法,因为它干净简洁(至少在我看来)。如果由于某种原因您不希望任何环顾四周,请使用以下模式:

:(\w+):

但是请注意,现在您必须显式地访问第一个捕获组才能获得匹配的单词,而在单词的两边都没有冒号。