#Region Includes
#EndRegion Includes
#NoTrayIcon
$sStringOld = "1234-1234-12345-1234"
$aStringSplit = StringSplit($sStringOld, "-")
Dim $sStringNew = ""
For $s = 1 To 2
$sStringNew &= $aStringSplit[$s] & "-"
Next
$sStringNew &= "000" & $aStringSplit[3] & "-4"
MsgBox(0, "", "$sStringOld = " & $sStringOld & @CRLF & "$sStringNew = " & $sStringNew)
axlwor сказал(а)::laugh:
можно
Код:;было $sOne = '1234-1234-12345-1234' ;стало $sOne = '1234-1234-00012345-4'
и все же?
$sString = "1234-1234-12345-1234"
$sRet = StringRegExpReplace($sString, "(12345)-123(4)", "000\1-\2")
ConsoleWrite($sRet & @LF)
CreatoR сказал(а):Atall [?]
Но т.к небыло предоставлено никаких условий, этот метод может провалиться при любом мелком изменений исходной строки.
Т.е там может быть и 14235, и 123? как тогда определять где нужно подставлять 000?Количество знаков между разделителями может варьироваться.
CreatoR сказал(а):Atall [?]
Т.е там может быть и 14235, и 123? как тогда определять где нужно подставлять 000?Количество знаков между разделителями может варьироваться.
madmasles сказал(а):Atall
Может так:Код:$sRet = StringRegExpReplace($sString, "(\d{5,7})-.*?(\d)$", "000\1-\2") ConsoleWrite($sRet & @LF)
Хорошо, значит нули нужно добавлять у третьего набора знаков, а у четвёртого набора убирать все цифры кроме последней, я верно понял?вот жесткий формат:
$sString = "1234-1234-12345-1234"
$sRet = StringRegExpReplace($sString, "\b(\d{4}-\d{4}-)(\d{5,7}-)\d?\d?\d?(\d)\b", "${1}000$2$3")
ConsoleWrite($sRet & @LF)
Если учитывать условия, то следующая строка уже не выдаст нужный результат:Да в общем подходит!
$sString = "1234-12345-12345-124"
$sString = "1234-12345-12345-124"
жесткий формат: (4 знака)-(4 знака)-(от 5 до 7 знаков)-(от 1 до 4 знаков)
На самом деле условие посложнее будет, но так как я хотел сам додуматься то сразу его не написал. Но если поможете будет здоровоХорошо, значит нули нужно добавлять у третьего набора знаков, а у четвёртого набора убирать все цифры кроме последней, я верно понял?
Ну в моём примере по крайней мере ничего не обрезается, я к тому и клонил, что если не подходит под формат, то не должно ничего заменять.Ваша строка
не подходит
Мой пример это и делает, он добавлят нули к 0012345 (во втором случае), если нужно удалять нули, то это ещё одно условие.задача отследить оба.
;$sString = "1234-1234-12345-0004"
$sString = "1234-1234-0012345-4"
$sRet = StringRegExpReplace($sString, "\b(\d{4}-\d{4}-)0*(\d{5,7}-)\d?\d?\d?(\d)\b", "${1}000$2$3")
ConsoleWrite($sRet & @LF)