Regex вопрос: почему это не совпадает? - PullRequest
1 голос
/ 17 мая 2010

У меня есть следующее регулярное выражение: (?<=\.\d+?)0+(?=\D|$) Я запускаю его для строки, содержащей следующее: SVC~NU^0270~313.3~329.18~~10~~6.00:

Когда он работает, он соответствует 6.00 (правильно), который моя логика обрезает на один ноль, чтобы превратить в 6.0. Затем регулярное выражение запускается снова (или должно), но не может получить 6.0.

Я ни в коем случае не эксперт по Regex, но мое понимание моего выражения таково, что он ищет десятичную с 1 или более необязательными (то есть действительно нулем или более) цифрами перед одним или несколькими нулями, сопровождаемый любым нецифровым символом или переводом строки. Предполагая, что интерпретация правильная, я не могу понять, почему она не будет соответствовать на втором проходе. В этом отношении я не уверен, почему мой Regex.Replace не соответствует полному 6.00 на первом проходе и удаляет оба конечных нуля ...

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 17 мая 2010

+? означает «соответствовать одному или нескольким, не жадным». Вы, вероятно, думаете, что это означает то же самое, что и *, то есть соответствует нулю или более раз. Таким образом, предыдущее выражение \d должно соответствовать хотя бы один раз , чтобы совпадало все ваше выражение, и это больше не относится к вводу 6.0.

Измените +? на *, и выражение должно работать.

0 голосов
/ 17 мая 2010

Попробуйте это:

(?<=\.\d+?)0*?(?=\D|$)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...