Как отфильтровать это с помощью регулярных выражений? - PullRequest
0 голосов
/ 13 октября 2010

У меня проблема, я хочу извлечь эти числа из строки, НО только тогда, когда за ними не следует "foo"

Пример:

  • "12:13 Foo" (нет)
  • "12:22 Бла" (да)

У меня есть регулярное выражение:

(\d+):(\d+)

и не знаю, что делать, чтобы он не выбирал строки с "Foo" после цифр.

Ответы [ 3 ]

4 голосов
/ 13 октября 2010

Это в некоторой степени зависит от вашего вкуса регулярных выражений, но если он поддерживает lookaround , вы можете использовать:

(\d+):(\d+)(?:\s+(?!Foo)|$)

Однако это не соответствует 12:34Bar (между пробелами нет4 и B).

Другое редактирование: если вы можете использовать атомное нащупывание, то я думаю, что это будет охватывать случаи, когда между последней цифрой и последующим словом нет пробела, а также предыдущие случаи ( Рубулярная ссылка ):

(\d+):(?>\d+)(?!\s*F[oO][oO]) 

#Or just (\d+):(?>\d+)(?!\s*Foo) if case-insensitive
2 голосов
/ 13 октября 2010

(обновленный ответ)

(\d+):(\d+)(?:\s(?!\s*Foo)|$)

Добавляя отрицательный прогноз (?!Foo), он будет соответствовать только строкам, которые не заканчиваются на "Foo" Он также захватит двухзначные группы в обратные ссылки 1 и 2.

Матчи:

  • 12: 34
  • 12: 22 Бла
  • 1: 1

Не будет совпадать:

  • 12: 13 Foo
  • 12: 13Foo
  • 12: 13 Foo
0 голосов
/ 13 октября 2010
(\d+):(\d+) (\s*)(^[Ff]^[Oo]^[Oo])(\s*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...