我有一个基本上是c风格源文件的文本。我需要匹配一个特定的字符,只有当它在字符串之外时才说':'。例如:
void main() {
int x = rand() % 2;
printf(x ? "heads : tails" : "tails : heads");
// I want to match this ---^ character, but not others
}
为了特殊起见,我正在使用.NET风格的正则表达式
答案 0 :(得分:1)
您可以使用匹配冒号或字符串的正则表达式(例如(:)|"[^"\r\n]*"
)来执行此操作。使用捕获组来确定冒号是否匹配。迭代这个正则表达式的匹配来处理冒号。
Regex regexObj = new Regex("(:)|\"[^\"\r\n]*\"");
Match matchResults = regexObj.Match(subjectString);
while (matchResults.Success) {
if (matchResult.Groups[1].Success) {
// Colon was matched
}
matchResults = matchResults.NextMatch();
}
请注意,虽然此正则表达式在您的代码示例上正常工作,但它通常不适用于C#代码。正则表达式不处理包含转义引号的字符串,不处理逐字字符串,也不排除注释中的冒号。如果你想要所有你需要使用相同的原则扩展正则表达式,例如:
(:)|string|verbatim string|single line comment|multi line comment
答案 1 :(得分:-1)
您可以使用balancing groups执行此操作,这是.net正则表达式的深度跟踪功能。