当匹配一个包含匹配二时,C#正则表达式分开

时间:2013-02-11 14:02:38

标签: c# regex

我的文字包含#[ ]所包围的字符串。我需要匹配这些字符串并找出里面的字符串。

我的示例文字:

Lorem ipsum dolor #[This is my first string.] sit amet, consectetur elit,
sed do eiusmod tempor incididunt #[This is my second string?] ut et dolore magna.

有了这篇文章,我希望有两场比赛:

#[This is my first string.]
#[This is my second string?]

现在我写了正则表达式:

\#\[([\w\s\W]*)\]

我添加了\W因为我想要包含点,问号和其他不是字母的字符。这会导致我出现问题,因为现在包含#[]会导致我的文字只有一个匹配项:

#[This is my first string.] sit amet, consectetur elit,
sed do eiusmod tempor incididunt #[This is my second string?]

当然,它会在#[的第一次出现和]的最后一次出现时匹配。 怎么解决这个?我可以接受不在我的字符串中包含#[],但如果可能的话,应包含所有其他非字母字符。

2 个答案:

答案 0 :(得分:2)

您的问题不是\W,而是**是贪婪的并且将匹配可能的最长字符串。因此,它会将第一个[与最后一个]进行匹配,并将所有内容与之间的内容进行匹配。

试试这个:

\#\[([\w\s\W]*?)\]

事实上,您应该能够将其简化为:

\#\[(.*?)\]

限定符后面的?*+)将强制最小匹配。即非贪婪。

答案 1 :(得分:0)

您的问题是\W也匹配]

解决此问题的简便方法是:在[匹配尽可能多的非]个字符之后:

(#\[[^\]]*\])

这应该很好地解决了这个问题。