Показать полную графическую версию : Регулярные выражения
Kickpopal
16-04-2017, 18:46
Здравствуйте, нужно помощь с обработкой исключений.Задача такая: нужно чтобы пропускало строки такого вида: целое или десятичное число(может быть, как положительным, так и отрицательным), на всё остальное должно ругаться.
Т.е, строку такого вида должно пропускать: "45.4545" или "-45.3434" или просто "45", а вот например так: ".45" или "44-455" - уже нет.
Вот что я написал:
for /f "delims=" %%A in ('echo.%number%^| findstr "[^0-9][.-]"') do set "nv=%%~A"
if not "%number%"=="%nv%" (goto :prog1) else (echo nekorrectnie dannie&goto vibor)
Но тут как видно, просто если есть "." или "-" - пропускается, а нужно, чтобы ещё от позицию зависило, т.е "-" должен быть только на первой позиции, если он на другой - то уже не должно пропускать, а точка, соответственно, не может быть на 1-ой и на последней позиции и должна быть в единственном виде.
Помогите довести до ума, спасибо.
Kickpopal
16-04-2017, 19:01
Также забыл упомянуть про вариант с нулями.просто 0 - должно пропускать, а вот всякие 000051 либо должно преобразовать к виду 51 либо вообще не пропускать.Я выбрал второе(хотя 1, наверное, более рациональный вариант) и сделал как-то так:
if "%number:~0,1%"=="0" (@if "%number:~1,1%"=="0" (echo "vvedite 4islo ne na4inauheecy c 0"&goto vibor) else (goto :npr1))
Т.е если первый 0, то идёт проверочка на второй 0, если ещё 2, то не пропускает, а если второй не ноль - то всё ок.
Но не уверен, что это хороший код.Лучше бы как-то в регулярку это занести.
Kickpopal, sed.exe, WSH, PowerShell или mshta.exe. Для findstr.exe задача, боюсь, будет не по плечу.
Kickpopal, а Вам зачем? В принципе, и .45, и 000051 — вполне допустимые числа.
Kickpopal
16-04-2017, 19:37
Kickpopal, а Вам зачем? В принципе, и .45, и 000051 — вполне допустимые числа. »
ну с точкой и нулями - допустим, а вот 45-453 - уже не совсем допустимое.Мне нужно чтобы именно десятичные или целые числа принимало для дальнейшей обработки.Я так понимаю в CMD регулярку нормально никак не сделать?
для дальнейшей обработки. »
Я про это и интересовался — для какой обработки?
Самое простое — использовать внешний WSH файл-фильтр, наподобие:
Option Explicit
Dim strValue
With WScript.CreateObject("VBScript.RegExp")
.Pattern = "^[-+]?[0-9]*\.?[0-9]+$"
For Each strValue In Split(WScript.StdIn.ReadAll(), vbCrLf)
strValue = Trim(strValue)
If .Test(strValue) Then
WScript.StdOut.WriteLine CStr(CDbl(strValue))
End If
Next
End With
WScript.Quit 0
Пример кода пакетного файла для фильтрации:
@echo off
setlocal enableextensions enabledelayedexpansion
(
echo 45.4545
echo -45.3434
echo 45
echo 0.45
echo .45
echo 44-455
echo 0
echo 000
echo 000051
)| cscript.exe //nologo "0002.vbs"
endlocal
exit /b 0
http://i.imgur.com/0T4lgF6.png
P.S. Можно, конечно, посидеть и слепить в одну строку на JScript для mshta.exe, чтобы без лишнего файла, но что-то не манится.
Kickpopal
16-04-2017, 20:51
Я про это и интересовался — для какой обработки? »
А далее число переводится из 10 с.c в разные системы счисления.И чтобы всё работало как нужно и нужна обработка исключений.
Спасибо большое, я понял.
А далее число переводится из 10 с.c в разные системы счисления. »
Может проще сразу на WSH/PoSH делать реализацию?
Kickpopal
16-04-2017, 20:56
Может проще сразу на WSH/PoSH делать реализацию? »
Да, конечно, проще.Но нужно было именно здесь :)
Как скажете. Текущая реализация Вас устроит?
Kickpopal
16-04-2017, 21:09
Как скажете. Текущая реализация Вас устроит? »
Да, спасибо.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.