我已经设法使用以下命令将所有内容(好吧,所有字母)都变成了一个空格:
@"^.*([A-Z][a-z].*)]\s"
但是,我想匹配 a(
而不是空格......我该如何管理这个?
在比赛中没有'('
如果您想要匹配任何字符直到该(
字符,那么这应该有效:
@"^.*?(?=\()"
如果您想要所有字母,那么这应该可以解决问题:
@"^[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
编辑:实际上,.*?
正如 Casimir 在他的回答中指出的那样,它可能更容易使用,而不是使用[^\)]*
. 在^
字符类中使用(字符类是[...]
构造)反转了含义,因此不是“这些字符中的任何一个”,而是“除了这些字符之外的任何字符”。所以使用该构造的表达式将是:
@"^[^\(]*(?=\()"
使用约束字符类是最好的方法
@"^[^(]*"
[^(]
表示所有字符,但(
请注意,您不需要捕获组,因为您想要的是整个模式。
您可以使用此模式:
([A-Z][a-z][^(]*)\(
该组将匹配一个大写拉丁字母,后跟一个小写拉丁字母,后跟除开括号外的任意数量的字符。请注意,这^.*
不是必需的。
或者这个,它产生相同的基本行为,但使用非贪婪量词代替:
([A-Z][a-z].*?)\(