jackass110 发表于 2010-7-15 01:13:59

[已解决]格式化字符StringFormat右补位正则表达式

本帖最后由 jackass110 于 2010-7-16 11:54 编辑

知道左补0的是StringFormat('%03s', $01)

现在需要右补0,如1返回100,22返回220

请教各位大大!

afan 发表于 2010-7-15 01:37:24

StringFormat貌似没有向右补0的搞法

水木子 发表于 2010-7-15 09:48:43

本帖最后由 水木子 于 2010-7-15 09:51 编辑

是这样吗?#include <String.au3>
_StringFormat('1')
_StringFormat('11')
_StringFormat('111')
_StringFormat('1111')

Func _StringFormat($sString)
        MsgBox(0, '原字符串:' & $sString, '格式化结果:' & _StringReverse(StringFormat('%03s', _StringReverse($sString))))
EndFunc   ;==>_StringFormat

afan 发表于 2010-7-15 10:01:28

是这样吗?
水木子 发表于 2010-7-15 09:48 http://www.autoitx.com/images/common/back.gif


    呵呵,这个想法真是妙极了~~

afan 发表于 2010-7-15 10:17:42

用正则比较麻烦,也弄个非正则的处理MsgBox(0, 0, StringAdd0Right(12345, 9))
MsgBox(0, 0, StringAdd0Right(12345, 4))
MsgBox(0, 0, StringAdd0Right(12345))

Func StringAdd0Right($d, $b = 3)
        Local $len = StringLen($d)
        If $len >= $b Then Return $d
        Return $d & StringFormat('%0' & $b - $len & 's', 0)
EndFunc   ;==>StringAdd0Right

水木子 发表于 2010-7-15 10:23:51

回复 4# afan
嘿嘿!谢谢前辈加分,主要还是你在2楼的回复提醒了我。

C.L 发表于 2010-7-15 12:20:44


MsgBox (0,"",_StringFormatRight (1,3))
MsgBox (0,"",_StringFormatRight (12,3))
MsgBox (0,"",_StringFormatRight (123,3))
MsgBox (0,"",_StringFormatRight (1234,5))

Func _StringFormatRight ($string,$len)
        Return StringRegExpReplace (StringFormat('%-0'&$len&'s', $string)," ","0")
EndFunc

afan 发表于 2010-7-15 12:30:19


C.L 发表于 2010-7-15 12:20 http://www.autoitx.com/images/common/back.gif


    这样一来貌似正则也不麻烦,呵呵~
%-0 后面的0可以不要,因为本来0遇到-就牺牲了,O(∩_∩)O~

C.L 发表于 2010-7-15 12:44:21

回复 8# afan

是的,那个0可以不要了,呵呵

ndyzx 发表于 2012-5-5 12:28:33

A大麻烦请教一个问题,因为这问题可能对多数人来说很简单,所以不敢发求助贴,我搜了很久,试了很多次都没办法解决:
就是用正则,求字符串(字符串是从复合框中读出的)前三位字符中的数字,如:
1.2ABCD123,得12
12.aggfabdd,得12
133.2agdgage得133
我试过^\d+,在水木子的正则表达式测试工具中通过,但用如下语句无法完成。$1='1.2ABCD123'
$2=StringRegExp ($1,"^\d+",3);
MsgBox(16, "测试",$2)虽然用StringLen,StringIsDigit,StringMid配循环可以完成要求,但要10多行。我想请教用正则怎么解决,哎太菜了。

fpquenya 发表于 2012-6-1 11:30:41

回复 10# ndyzx

我来试一下

$1='1.2ABCD123'
$2=StringRegExp ($1,"\b([\d.]){3,}(?=)",3);
MsgBox(16, "测试",$2)

netegg 发表于 2012-6-1 12:46:27

回复 1# jackass110
local $str = 1
local $i = '000000000000000000000000000000000000000'
stringleft($str & $i, 4)

hollandmfq 发表于 2014-5-15 09:51:27

雷锋精神传天下!谢谢分享!
页: [1]
查看完整版本: [已解决]格式化字符StringFormat右补位正则表达式