Как исключить цифры, за которыми следует определенная строка

#c# #regex

#c# #регулярное выражение

Вопрос:

У меня довольно длинный шаблон регулярных выражений. Вот только часть этого:

 string pattern = @"((?<!top=)(?<![A-Za-z])d) ";
  

Учитывая строку:

 date(Account/AccountClose) gt 2019-03-25 and Brg eq '100'amp;$select=IdAccountCurrentamp;$skip=10amp;$top=10
  

Это соответствует 2019, 03, 25, 100, 10 and 0 .

Я хочу исключить последнюю 0 из результата сопоставления. Другими словами, все числа, за которыми следует top= , не должны совпадать.

Мое решение работает, только если у меня есть одна цифра после top= .Как я могу достичь желаемого результата?

пример регулярного выражения 101

ОБНОВЛЕНИЕ: К сожалению, предлагаемые решения не подходят для всего шаблона. Я попытался упростить свой пример, но, похоже, это невозможно сделать.

Итак, весь мой шаблон регулярных выражений:

 string pattern = @"((?<!top=)(?<![A-Za-z])d|-|Td |:|.| |(?<=d)Z) |bfalseb|btrueb|bnullb|'[^'] '|(['d][^)] )";
  

Мне нужно отредактировать этот шаблон, чтобы исключить все цифры сразу после top= .

весь мой пример (пожалуйста, смотрите последнюю строку в этом примере, последняя 0 не должна совпадать)

Ответ №1:

Просто добавьте 0-9 в свое регулярное выражение, чтобы цифре не предшествовала другая цифра:

 ((?<!top=)(?<![A-Za-z0-9])d )
  

Смотрите демонстрацию здесь.

Но вы также можете просто использовать границы слов:

 (?<!top=)b(d )
  

Смотрите демонстрацию здесь.

Комментарии:

1. Примечание b является более строгим, поскольку bd никогда не будет соответствовать цифре после _ .

Ответ №2:

Вы можете изменить свое регулярное выражение на это, где я использовал b , чтобы отклонить частичное совпадение цифр,

 (?<!top=)(?<![A-Za-z])bd 
  

ДЕМОНСТРАЦИЯ

Способ, которым вы написали свое регулярное выражение, ((?<!top=)(?<![A-Za-z])d) будет работать, применяя условие по отдельности, а затем подсчитывая один или несколько таких символов, которые не позволили бы использовать b в вашем регулярном выражении, и, следовательно, я изменил его, чтобы удалить внешнюю скобку и использовать bd . Надеюсь, это даст вам все желаемые совпадения. Дайте мне знать, если у вас возникнут какие-либо проблемы.