#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
. Надеюсь, это даст вам все желаемые совпадения. Дайте мне знать, если у вас возникнут какие-либо проблемы.