2013-02-11 45 views
0

我有一個文本將包含由#[ ]包圍的字符串。我需要匹配這些字符串並找出裏面的字符串。C#正則表達式在匹配一個包含匹配二時分開

我的示例文本:

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

你的問題不是\W,這是**是貪婪的,並且會匹配儘可能長的字符串。所以它匹配第一個[與最後],並採取之間的一切。

試試這個:

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

事實上,你應該能夠簡化它只是:

\#\[(.*?)\] 

?預選賽(*+)之後將強制最小比賽。即非貪婪。

+0

完美地工作。 – John 2013-02-11 14:11:46

0

您的問題是\W也匹配]

最簡單的辦法解決這個問題是:後[匹配許多非]字符可能:

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

這應該做的伎倆很好。