我已經成功地得到的一切(當然,使用所有字母)到一個空白如下:匹配字符串直到遇到一個「(」
@"^.*([A-Z][a-z].*)]\s"
不過,我想匹配的(
而不是一個空白......我該怎麼管理這個
而無需「(」在比賽中
我已經成功地得到的一切(當然,使用所有字母)到一個空白如下:匹配字符串直到遇到一個「(」
@"^.*([A-Z][a-z].*)]\s"
不過,我想匹配的(
而不是一個空白......我該怎麼管理這個
而無需「(」在比賽中
如果你想要的是任何字符匹配,直到(
字符,那麼這應該工作:
@"^.*?(?=\()"
如果你想要所有的字母,那麼這應該做的伎倆:
@"^[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)
編輯:其實,而是採用.*?
,如卡西米爾在他的回答已經注意到它可能更容易使用[^\)]*
。在字符類中使用的^
(字符類是[...]
構造)顛倒了含義,所以不是「任何這些字符」,而是「除這些字符之外的任何」。因此,使用該結構的表達應該是:
@"^[^\(]*(?=\()"
這仍然包括'('在比賽中,任何方式來保持它和匹配直到和沒有'('? –
是的,看到我的編輯我已經包括一個構造,應該做你想做的事 – rossipedia
第一個完美的作品,但第二個沒有給出任何匹配 –
您可以使用此模式:?
([A-Z][a-z][^(]*)\(
該組將匹配一個大寫拉丁字母,後跟一個小寫拉丁字母,後面跟任意數量的字符,而不是一個左括號。請注意,^.*
是沒有必要的。
還是這個,這會產生相同的基本行爲,但採用的是non-greedy quantifier代替:
([A-Z][a-z].*?)\(
使用約束字符類是最好的方式
@"^[^(]*"
[^(]
意味着所有的字符,但(
請注意,您不需要捕捉組,因爲你想要的是整個模式。
'\('? – Ryan
這包括'('..我怎樣才能管理沒有它? –
您的當前表達式也與空白匹配。獲取組1的值在這兩種情況下,此外,以'^。*'開頭是沒有意義的,只是把這件事全部拿出來。 – Ryan