4

我已经设法使用以下命令将所有内容(好吧,所有字母)都变成了一个空格:

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

但是,我想匹配 a(而不是空格......我该如何管理这个?

在比赛中没有'('

4

3 回答 3

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

参考:正则表达式语言 - 快速参考 (MSDN)

编辑:实际上,.*?正如 Casimir 在他的回答中指出的那样,它可能更容易使用,而不是使用[^\)]*. 在^字符类中使用(字符类是[...]构造)反转了含义,因此不是“这些字符中的任何一个”,而是“除了这些字符之外的任何字符”。所以使用该构造的表达式将是:

@"^[^\(]*(?=\()"
于 2013-06-29T22:14:46.203 回答
3

使用约束字符类是最好的方法

@"^[^(]*" 

[^(]表示所有字符,但(

请注意,您不需要捕获组,因为您想要的是整个模式。

于 2013-06-29T22:17:37.033 回答
0

您可以使用此模式:

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

该组将匹配一个大写拉丁字母,后跟一个小写拉丁字母,后跟除开括号外的任意数量的字符。请注意,这^.*不是必需的。

或者这个,它产生相同的基本行为,但使用非贪婪量词代替:

([A-Z][a-z].*?)\(
于 2013-06-29T22:14:24.030 回答