匹配字符串,直到它遇到';(';

本文关键字:遇到 字符串 | 更新日期: 2023-09-27 18:20:20

我已经使用以下方法将所有内容(好吧,所有字母)都设置为空白:

@"^.*([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

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

EDIT:实际上,正如Casimir在回答中指出的那样,使用[^')]*可能更容易,而不是使用.*?。字符类中使用的^(字符类是[...]结构)颠倒了含义,因此它的意思不是"这些字符中的任何一个",而是"除了这些字符之外的任何"。因此,使用该结构的表达式将是:

@"^[^'(]*(?='()"

使用约束字符类是的最佳方式

@"^[^(]*" 

[^(]表示除( 之外的所有字符

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

您可以使用以下模式:

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

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

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

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