在可选令牌之间捕获文本

时间:2017-04-08 08:10:50

标签: .net regex

目前我有以下正则表达式:

!include <(.*)>

并给出以下输入:

## Heading
Some text

!include <mykey>

## Heading 2
Some more text

!include <mykey2>
More text

我得到!include <mykey>匹配捕获mykey!include <mykey2>匹配捕获mykey2,这正是我想要的。

但是现在我希望<>标记是可选的,所以给出以下输入:

## Heading
Some text

!include mykey

## Heading 2
Some more text

!include <mykey2>
More text

我希望获得相同的捕获。 我尝试过以下方法:

!include <?([^<>]*)>?$

但它不起作用,任何帮助都将不胜感激。

UPDATE1

我已经尝试了@ pedro-lobito回答,但我在$ 1组中获得了额外的>。 这是我正在运行的代码:

var includeRegex = new Regex("!include\\s+<?(.+?)>?$",
                RegexOptions.Compiled | RegexOptions.Multiline);
var input = @"
## Heading
Some text
!include <mykey>
## Heading 2
Some more text
";
var match = includeRegex.Match(input);
Console.WriteLine(match.Groups[1].Value); // Outputs mykey>, it should be mykey

1 个答案:

答案 0 :(得分:0)

使用?制作<>可选

!include\s<?(.*?)>?$

Demo