Regex lookahead только удаляя последний символ - PullRequest
0 голосов
/ 16 октября 2018

Я создаю регулярное выражение, которое ищет текст, но только если после совпадения нет тире.Я использую прогноз для этого:

  • Регулярное выражение: Text[\s\.][0-9]*(?!-)

Expected result Result --------------- ------- Text 11 Text 11 Text 11 Text 52- <No Match> Text 5

Контрольный пример: https://regex101.com/r/doklxc/1/

Кажется, что предвидение совпадает только с предыдущим символом, что оставляет меня с Text 5, тогда как мне нужно, чтобы оно вообще не возвращало совпадение.

Я проверяю https://www.regular -выражения.info / направляет и пытается использовать группы, но я не могу обернуть голову вокруг этого.

Как сделать так, чтобы функция lookbehind влияла на все предыдущее совпадение?

Я используюбиблиотека по умолчанию .Net Text.RegularExpressions.

1 Ответ

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

[0-9]* возвращает назад и позволяет механизму регулярных выражений находить совпадение, даже если есть -.

Существует два способа: либо использовать атомные группы, либо проверить цифру в поле зрения:

Text[\s.][0-9]*(?![-\d])

Или

Text(?>[\s.][0-9]*)(?!-)

См. Демонстрационную версию regex.# 1 и regex demo # 2 .

Подробности

  • Text[\s.][0-9]*(?![-\d]) совпадений Text, затемточка или пробел, затем 0 или более цифр, и затем проверяется, есть ли - или цифра сразу справа, и если она есть, она не соответствует.Даже если попытаться отследить и сопоставить меньшее количество цифр, чем было взято ранее, \d в предвкушении потерпит неудачу при этих попытках
  • Text(?>[\s.][0-9]*)(?!-) соответствует Text, затем начнется атомная группа, где обратного отслеживания не будетпусть после того, как групповые шаблоны найдут соответствующий им текст.(?!-) проверяет - только после того, как шаблон [0-9]* пытается захватить любые цифры.
...