我设法使用以下内容将所有内容(好的,所有字母)都放到空白处:
@"^.*([A-Z][a-z].*)]\s"
但是,我希望匹配(
而不是空格...我该如何管理?
没有匹配中的'('
答案 0 :(得分: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)
编辑:实际上,正如卡西米尔在回答中指出的那样,使用.*?
可能更容易,而不是使用[^\)]*
。在字符类中使用的^
(字符类是[...]
构造)反转了含义,因此它代替“任何这些字符”,它意味着“除之外的任何这些人物“。所以使用该结构的表达式将是:
@"^[^\(]*(?=\()"
答案 1 :(得分:3)
使用约束字符类是最好的方法
@"^[^(]*"
[^(]
表示除(
请注意,您不需要捕获组,因为您需要的是整个模式。
答案 2 :(得分:0)
您可以使用此模式:
([A-Z][a-z][^(]*)\(
该组将匹配大写拉丁字母,后跟小写拉丁字母,后跟除开括号之外的任意数量的字符。请注意,^.*
不是必需的。
或者,这会产生相同的基本行为,但使用non-greedy quantifier代替:
([A-Z][a-z].*?)\(