2013-06-29 54 views
4

我已經成功地得到的一切(當然,使用所有字母)到一個空白如下:匹配字符串直到遇到一個「(」

@"^.*([A-Z][a-z].*)]\s" 

不過,我想匹配的(而不是一個空白......我該怎麼管理這個

而無需「(」在比賽中

+0

'\('? – Ryan

+0

這包括'('..我怎樣才能管理沒有它? –

+0

您的當前表達式也與空白匹配。獲取組1的值在這兩種情況下,此外,以'^。*'開頭是沒有意義的,只是把這件事全部拿出來。 – Ryan

回答

9

如果你想要的是任何字符匹配,直到(字符,那麼這應該工作:

@"^.*?(?=\()" 

如果你想要所有的字母,那麼這應該做的伎倆:

@"^[a-zA-Z]*(?=\()" 

說明:

^   Matches the beginning of the string 

.*?   One or more of any character. The trailing ? means 'non-greedy', 
      which means the minimum characters that match, rather than the maximum 

(?=   This means 'zero-width positive lookahead assertion'. That means that the 
      containing expression won't be included in the match. 

\(   Escapes the (character (since it has special meaning in regular 
      expressions) 

)   Closes off the lookahead 

[a-zA-Z]*? Zero or more of any character from a to z, or from A to Z 

參考:Regular Expression Language - Quick Reference (MSDN)

編輯:其實,而是採用.*?,如卡西米爾在他的回答已經注意到它可能更容易使用[^\)]*。在字符類中使用的^(字符類是[...]構造)顛倒了含義,所以不是「任何這些字符」,而是「除這些字符之外的任何」。因此,使用該結構的表達應該是:

@"^[^\(]*(?=\()" 
+0

這仍然包括'('在比賽中,任何方式來保持它和匹配直到和沒有'('? –

+0

是的,看到我的編輯我已經包括一個構造,應該做你想做的事 – rossipedia

+0

第一個完美的作品,但第二個沒有給出任何匹配 –

0

您可以使用此模式:?

([A-Z][a-z][^(]*)\(

該組將匹配一個大寫拉丁字母,後跟一個小寫拉丁字母,後面跟任意數量的字符,而不是一個左括號。請注意,^.*是沒有必要的。

還是這個,這會產生相同的基本行爲,但採用的是non-greedy quantifier代替:

([A-Z][a-z].*?)\(
3

使用約束字符類是最好的方式

@"^[^(]*" 

[^(]意味着所有的字符,但(

請注意,您不需要捕捉組,因爲你想要的是整個模式。

相關問題