找回密码
 加入
搜索
查看: 6999|回复: 12

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

  [复制链接]
发表于 2010-7-15 01:13:59 | 显示全部楼层 |阅读模式
本帖最后由 jackass110 于 2010-7-16 11:54 编辑

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

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

请教各位大大!
发表于 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

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

发表于 2010-7-15 10:01:28 | 显示全部楼层
是这样吗?
水木子 发表于 2010-7-15 09:48



    呵呵,这个想法真是妙极了~~
发表于 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楼的回复提醒了我。
发表于 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

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-7-15 12:30:19 | 显示全部楼层
C.L 发表于 2010-7-15 12:20



    这样一来貌似正则也不麻烦,呵呵~
%-0 后面的0可以不要,因为本来0遇到-就牺牲了,O(∩_∩)O~
发表于 2010-7-15 12:44:21 | 显示全部楼层
回复 8# afan

是的,那个0可以不要了,呵呵
发表于 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多行。我想请教用正则怎么解决,哎太菜了。
发表于 2012-6-1 11:30:41 | 显示全部楼层
回复 10# ndyzx

我来试一下

$1='1.2ABCD123'
$2=StringRegExp ($1,"\b([\d.]){3,}(?=[a-zA-Z])",3);
MsgBox(16, "测试",$2)
发表于 2012-6-1 12:46:27 | 显示全部楼层
回复 1# jackass110
local $str = 1
local $i = '000000000000000000000000000000000000000'
stringleft($str & $i, 4)
发表于 2014-5-15 09:51:27 | 显示全部楼层
雷锋精神传天下!谢谢分享!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 21:55 , Processed in 0.086373 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表