Как исключить цифры, сопровождаемые определенной строкой - PullRequest
2 голосов
/ 01 апреля 2019

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

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

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

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

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

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

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

regex101 пример

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

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

string pattern = @"((?<!top=)(?<![A-Za-z])\d|-|T\d+|:|\.|\+|(?<=\d)Z)+|\bfalse\b|\btrue\b|\bnull\b|'[^']+'|\(['\d][^\)]+\)";

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

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

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

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

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

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

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

(?<!top=)\b(\d+)

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

2 голосов
/ 01 апреля 2019

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

(?<!top=)(?<![A-Za-z])\b\d+

Демо

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...