Regex кавычки, а не конкретное слово перед кавычками - PullRequest
0 голосов
/ 22 октября 2018

То, что я пытаюсь сделать, это так просто, но в то же время это не так.

У меня есть функция RegEx в C #, чтобы найти все слова внутри кавычек, но если конкретное слово существует докавычки, игнорировать все слово и перейти к следующему ряду.Хотя все еще ищите символы определенного типа внутри кавычек и игнорируйте их.

Пример -

My RegEx = @"(?<!Foo\()\""[^{}\r\n]*\""";

Text -
dontfindme1 = "Hello{}"
dontfindme2 = Foo("ABC")
findme1 = "Just a simple text to find"
findme2 = SuperFoo("WORKS")

Пример вывода -

"ABC"
"Just a simple text to find"
"WORKS"

Теперь моя проблема в том, чтоЯ не хочу, чтобы найти имя "Foo (" перед кавычками. И я не хочу, чтобы найти "{" или "}" или "(" или ")" или новые строки, мне нужно только, чтобы "ABC" не было найдено и пропуститьв следующий ряд.

1 Ответ

0 голосов
/ 22 октября 2018

Вы можете использовать отрицательный lookahead (?!, чтобы проверить, что строка не совпадает либо {} между двойными кавычками, либо Foo(

^(?!.*\bFoo\()(?!.*"[^"\r\n]*[{}][^"\r\n]*").*$

In C # string pattern = @"^(?!.*\bFoo\()(?!.*""[^""\r\n]*[{}][^""\r\n]*"").*$";

Regex demo

Пояснение

  • ^ Утверждение началастрока
  • (?! Отрицательный взгляд, утверждайте, что последующее не
    • .*\bFoo\( Соответствует любому символу 0+ раз, за ​​которым следует граница слова и Foo (
  • ) Закрыть отрицательный взгляд
  • (?! Отрицательный взгляд, утверждать, что последующее не
    • .* Совпадение с любым символом 0+ раз
    • "[^"\r\n]* Соответствует двойной кавычке, соответствует 0+ раз, а не ", \r, \n
    • [{}] Соответствует { или }
    • [^"\r\n]*"Совпадение 0+ раз не ", \r, \n с последующим сопоставлением двойной кавычки
  • ) Закрыть отрицательный прогноз
  • .* Совпадениелюбой символ 0+ раз
  • $ Утвердить конец строки
...