Примечание: Больше не актуально, так как описание проблемы изменилось довольно существенно.Я все еще оставлю это здесь, поскольку это (на мой взгляд) все еще жизнеспособное решение актуальной проблемы.
(?<!using.+)\.CreateGraphics\(
может работать.Тест PowerShell:
PS> $re='(?<!using.+)\.CreateGraphics\('
PS> 'pnlSearchAndBrowseButton.CreateGraphics().DrawLine(lineLight, 2, h - 1, w - 1, h - 1);',
>> 'using (Graphics g = label.CreateGraphics())' -match $re
>>
pnlSearchAndBrowseButton.CreateGraphics().DrawLine(lineLight, 2, h - 1, w - 1, h - 1);
Одно замечание: регулярное выражение не будет работать в языках, которые не поддерживают просмотр заданной длины.Но .NET делает, как можно видеть выше.
Или даже не использует регулярное выражение (богохульство!):
if (line.Contains(".CreateGraphics(") && !line.Contains("using")) ...
Или сделайте вариант с двумя проходами:
lines.Select(l => l.Contains(".CreateGraphics(")).Select(l => !l.Contains("using"))